| OLD | NEW |
| 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 "net/proxy/proxy_service.h" | 5 #include "net/proxy/proxy_service.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/format_macros.h" | 9 #include "base/format_macros.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 85 | 85 |
| 86 private: | 86 private: |
| 87 GURL pending_request_url_; | 87 GURL pending_request_url_; |
| 88 CompletionCallback* pending_request_callback_; | 88 CompletionCallback* pending_request_callback_; |
| 89 std::string* pending_request_bytes_; | 89 std::string* pending_request_bytes_; |
| 90 }; | 90 }; |
| 91 | 91 |
| 92 TEST(ProxyServiceTest, Direct) { | 92 TEST(ProxyServiceTest, Direct) { |
| 93 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; | 93 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; |
| 94 scoped_refptr<ProxyService> service( | 94 scoped_refptr<ProxyService> service( |
| 95 new ProxyService(new MockProxyConfigService, resolver, NULL, | 95 new ProxyService(new MockProxyConfigService, resolver, NULL, NULL)); |
| 96 BoundNetLog())); | |
| 97 | 96 |
| 98 GURL url("http://www.google.com/"); | 97 GURL url("http://www.google.com/"); |
| 99 | 98 |
| 100 ProxyInfo info; | 99 ProxyInfo info; |
| 101 TestCompletionCallback callback; | 100 TestCompletionCallback callback; |
| 102 CapturingBoundNetLog log(CapturingNetLog::kUnbounded); | 101 CapturingBoundNetLog log(CapturingNetLog::kUnbounded); |
| 103 int rv = service->ResolveProxy(url, &info, &callback, NULL, log.bound()); | 102 int rv = service->ResolveProxy(url, &info, &callback, NULL, log.bound()); |
| 104 EXPECT_EQ(OK, rv); | 103 EXPECT_EQ(OK, rv); |
| 105 EXPECT_TRUE(resolver->pending_requests().empty()); | 104 EXPECT_TRUE(resolver->pending_requests().empty()); |
| 106 | 105 |
| 107 EXPECT_TRUE(info.is_direct()); | 106 EXPECT_TRUE(info.is_direct()); |
| 108 | 107 |
| 109 // Check the NetLog was filled correctly. | 108 // Check the NetLog was filled correctly. |
| 110 EXPECT_EQ(5u, log.entries().size()); | 109 EXPECT_EQ(5u, log.entries().size()); |
| 111 EXPECT_TRUE(LogContainsBeginEvent( | 110 EXPECT_TRUE(LogContainsBeginEvent( |
| 112 log.entries(), 0, NetLog::TYPE_PROXY_SERVICE)); | 111 log.entries(), 0, NetLog::TYPE_PROXY_SERVICE)); |
| 113 EXPECT_TRUE(LogContainsEndEvent( | 112 EXPECT_TRUE(LogContainsEndEvent( |
| 114 log.entries(), 4, NetLog::TYPE_PROXY_SERVICE)); | 113 log.entries(), 4, NetLog::TYPE_PROXY_SERVICE)); |
| 115 } | 114 } |
| 116 | 115 |
| 117 TEST(ProxyServiceTest, PAC) { | 116 TEST(ProxyServiceTest, PAC) { |
| 118 MockProxyConfigService* config_service = | 117 MockProxyConfigService* config_service = |
| 119 new MockProxyConfigService("http://foopy/proxy.pac"); | 118 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 120 | 119 |
| 121 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; | 120 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; |
| 122 | 121 |
| 123 scoped_refptr<ProxyService> service( | 122 scoped_refptr<ProxyService> service( |
| 124 new ProxyService(config_service, resolver, NULL, BoundNetLog())); | 123 new ProxyService(config_service, resolver, NULL, NULL)); |
| 125 | 124 |
| 126 GURL url("http://www.google.com/"); | 125 GURL url("http://www.google.com/"); |
| 127 | 126 |
| 128 ProxyInfo info; | 127 ProxyInfo info; |
| 129 TestCompletionCallback callback; | 128 TestCompletionCallback callback; |
| 130 CapturingBoundNetLog log(CapturingNetLog::kUnbounded); | 129 CapturingBoundNetLog log(CapturingNetLog::kUnbounded); |
| 131 | 130 |
| 132 int rv = service->ResolveProxy(url, &info, &callback, NULL, log.bound()); | 131 int rv = service->ResolveProxy(url, &info, &callback, NULL, log.bound()); |
| 133 EXPECT_EQ(ERR_IO_PENDING, rv); | 132 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 134 | 133 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 161 | 160 |
| 162 // Test that the proxy resolver does not see the URL's username/password | 161 // Test that the proxy resolver does not see the URL's username/password |
| 163 // or its reference section. | 162 // or its reference section. |
| 164 TEST(ProxyServiceTest, PAC_NoIdentityOrHash) { | 163 TEST(ProxyServiceTest, PAC_NoIdentityOrHash) { |
| 165 MockProxyConfigService* config_service = | 164 MockProxyConfigService* config_service = |
| 166 new MockProxyConfigService("http://foopy/proxy.pac"); | 165 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 167 | 166 |
| 168 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; | 167 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; |
| 169 | 168 |
| 170 scoped_refptr<ProxyService> service( | 169 scoped_refptr<ProxyService> service( |
| 171 new ProxyService(config_service, resolver, NULL, BoundNetLog())); | 170 new ProxyService(config_service, resolver, NULL, NULL)); |
| 172 | 171 |
| 173 GURL url("http://username:password@www.google.com/?ref#hash#hash"); | 172 GURL url("http://username:password@www.google.com/?ref#hash#hash"); |
| 174 | 173 |
| 175 ProxyInfo info; | 174 ProxyInfo info; |
| 176 TestCompletionCallback callback; | 175 TestCompletionCallback callback; |
| 177 int rv = service->ResolveProxy(url, &info, &callback, NULL, NULL); | 176 int rv = service->ResolveProxy(url, &info, &callback, NULL, BoundNetLog()); |
| 178 EXPECT_EQ(ERR_IO_PENDING, rv); | 177 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 179 | 178 |
| 180 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 179 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| 181 resolver->pending_set_pac_script_request()->pac_url()); | 180 resolver->pending_set_pac_script_request()->pac_url()); |
| 182 resolver->pending_set_pac_script_request()->CompleteNow(OK); | 181 resolver->pending_set_pac_script_request()->CompleteNow(OK); |
| 183 | 182 |
| 184 ASSERT_EQ(1u, resolver->pending_requests().size()); | 183 ASSERT_EQ(1u, resolver->pending_requests().size()); |
| 185 // The URL should have been simplified, stripping the username/password/hash. | 184 // The URL should have been simplified, stripping the username/password/hash. |
| 186 EXPECT_EQ(GURL("http://www.google.com/?ref"), | 185 EXPECT_EQ(GURL("http://www.google.com/?ref"), |
| 187 resolver->pending_requests()[0]->url()); | 186 resolver->pending_requests()[0]->url()); |
| 188 | 187 |
| 189 // We end here without ever completing the request -- destruction of | 188 // We end here without ever completing the request -- destruction of |
| 190 // ProxyService will cancel the outstanding request. | 189 // ProxyService will cancel the outstanding request. |
| 191 } | 190 } |
| 192 | 191 |
| 193 TEST(ProxyServiceTest, PAC_FailoverWithoutDirect) { | 192 TEST(ProxyServiceTest, PAC_FailoverWithoutDirect) { |
| 194 MockProxyConfigService* config_service = | 193 MockProxyConfigService* config_service = |
| 195 new MockProxyConfigService("http://foopy/proxy.pac"); | 194 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 196 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; | 195 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; |
| 197 | 196 |
| 198 scoped_refptr<ProxyService> service( | 197 scoped_refptr<ProxyService> service( |
| 199 new ProxyService(config_service, resolver, NULL, BoundNetLog())); | 198 new ProxyService(config_service, resolver, NULL, NULL)); |
| 200 | 199 |
| 201 GURL url("http://www.google.com/"); | 200 GURL url("http://www.google.com/"); |
| 202 | 201 |
| 203 ProxyInfo info; | 202 ProxyInfo info; |
| 204 TestCompletionCallback callback1; | 203 TestCompletionCallback callback1; |
| 205 int rv = service->ResolveProxy(url, &info, &callback1, NULL, NULL); | 204 int rv = service->ResolveProxy(url, &info, &callback1, NULL, BoundNetLog()); |
| 206 EXPECT_EQ(ERR_IO_PENDING, rv); | 205 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 207 | 206 |
| 208 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 207 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| 209 resolver->pending_set_pac_script_request()->pac_url()); | 208 resolver->pending_set_pac_script_request()->pac_url()); |
| 210 resolver->pending_set_pac_script_request()->CompleteNow(OK); | 209 resolver->pending_set_pac_script_request()->CompleteNow(OK); |
| 211 | 210 |
| 212 ASSERT_EQ(1u, resolver->pending_requests().size()); | 211 ASSERT_EQ(1u, resolver->pending_requests().size()); |
| 213 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); | 212 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); |
| 214 | 213 |
| 215 // Set the result in proxy resolver. | 214 // Set the result in proxy resolver. |
| 216 resolver->pending_requests()[0]->results()->UseNamedProxy("foopy:8080"); | 215 resolver->pending_requests()[0]->results()->UseNamedProxy("foopy:8080"); |
| 217 resolver->pending_requests()[0]->CompleteNow(OK); | 216 resolver->pending_requests()[0]->CompleteNow(OK); |
| 218 | 217 |
| 219 EXPECT_EQ(OK, callback1.WaitForResult()); | 218 EXPECT_EQ(OK, callback1.WaitForResult()); |
| 220 EXPECT_FALSE(info.is_direct()); | 219 EXPECT_FALSE(info.is_direct()); |
| 221 EXPECT_EQ("foopy:8080", info.proxy_server().ToURI()); | 220 EXPECT_EQ("foopy:8080", info.proxy_server().ToURI()); |
| 222 | 221 |
| 223 // Now, imagine that connecting to foopy:8080 fails: there is nothing | 222 // Now, imagine that connecting to foopy:8080 fails: there is nothing |
| 224 // left to fallback to, since our proxy list was NOT terminated by | 223 // left to fallback to, since our proxy list was NOT terminated by |
| 225 // DIRECT. | 224 // DIRECT. |
| 226 TestCompletionCallback callback2; | 225 TestCompletionCallback callback2; |
| 227 rv = service->ReconsiderProxyAfterError(url, &info, &callback2, NULL, NULL); | 226 rv = service->ReconsiderProxyAfterError(url, &info, &callback2, NULL, |
| 227 BoundNetLog()); |
| 228 // ReconsiderProxyAfterError returns error indicating nothing left. | 228 // ReconsiderProxyAfterError returns error indicating nothing left. |
| 229 EXPECT_EQ(ERR_FAILED, rv); | 229 EXPECT_EQ(ERR_FAILED, rv); |
| 230 EXPECT_TRUE(info.is_empty()); | 230 EXPECT_TRUE(info.is_empty()); |
| 231 } | 231 } |
| 232 | 232 |
| 233 // The proxy list could potentially contain the DIRECT fallback choice | 233 // The proxy list could potentially contain the DIRECT fallback choice |
| 234 // in a location other than the very end of the list, and could even | 234 // in a location other than the very end of the list, and could even |
| 235 // specify it multiple times. | 235 // specify it multiple times. |
| 236 // | 236 // |
| 237 // This is not a typical usage, but we will obey it. | 237 // This is not a typical usage, but we will obey it. |
| 238 // (If we wanted to disallow this type of input, the right place to | 238 // (If we wanted to disallow this type of input, the right place to |
| 239 // enforce it would be in parsing the PAC result string). | 239 // enforce it would be in parsing the PAC result string). |
| 240 // | 240 // |
| 241 // This test will use the PAC result string: | 241 // This test will use the PAC result string: |
| 242 // | 242 // |
| 243 // "DIRECT ; PROXY foobar:10 ; DIRECT ; PROXY foobar:20" | 243 // "DIRECT ; PROXY foobar:10 ; DIRECT ; PROXY foobar:20" |
| 244 // | 244 // |
| 245 // For which we expect it to try DIRECT, then foobar:10, then DIRECT again, | 245 // For which we expect it to try DIRECT, then foobar:10, then DIRECT again, |
| 246 // then foobar:20, and then give up and error. | 246 // then foobar:20, and then give up and error. |
| 247 // | 247 // |
| 248 // The important check of this test is to make sure that DIRECT is not somehow | 248 // The important check of this test is to make sure that DIRECT is not somehow |
| 249 // cached as being a bad proxy. | 249 // cached as being a bad proxy. |
| 250 TEST(ProxyServiceTest, PAC_FailoverAfterDirect) { | 250 TEST(ProxyServiceTest, PAC_FailoverAfterDirect) { |
| 251 MockProxyConfigService* config_service = | 251 MockProxyConfigService* config_service = |
| 252 new MockProxyConfigService("http://foopy/proxy.pac"); | 252 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 253 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; | 253 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; |
| 254 | 254 |
| 255 scoped_refptr<ProxyService> service( | 255 scoped_refptr<ProxyService> service( |
| 256 new ProxyService(config_service, resolver, NULL, BoundNetLog())); | 256 new ProxyService(config_service, resolver, NULL, NULL)); |
| 257 | 257 |
| 258 GURL url("http://www.google.com/"); | 258 GURL url("http://www.google.com/"); |
| 259 | 259 |
| 260 ProxyInfo info; | 260 ProxyInfo info; |
| 261 TestCompletionCallback callback1; | 261 TestCompletionCallback callback1; |
| 262 int rv = service->ResolveProxy(url, &info, &callback1, NULL, NULL); | 262 int rv = service->ResolveProxy(url, &info, &callback1, NULL, BoundNetLog()); |
| 263 EXPECT_EQ(ERR_IO_PENDING, rv); | 263 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 264 | 264 |
| 265 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 265 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| 266 resolver->pending_set_pac_script_request()->pac_url()); | 266 resolver->pending_set_pac_script_request()->pac_url()); |
| 267 resolver->pending_set_pac_script_request()->CompleteNow(OK); | 267 resolver->pending_set_pac_script_request()->CompleteNow(OK); |
| 268 | 268 |
| 269 ASSERT_EQ(1u, resolver->pending_requests().size()); | 269 ASSERT_EQ(1u, resolver->pending_requests().size()); |
| 270 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); | 270 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); |
| 271 | 271 |
| 272 // Set the result in proxy resolver. | 272 // Set the result in proxy resolver. |
| 273 resolver->pending_requests()[0]->results()->UsePacString( | 273 resolver->pending_requests()[0]->results()->UsePacString( |
| 274 "DIRECT ; PROXY foobar:10 ; DIRECT ; PROXY foobar:20"); | 274 "DIRECT ; PROXY foobar:10 ; DIRECT ; PROXY foobar:20"); |
| 275 resolver->pending_requests()[0]->CompleteNow(OK); | 275 resolver->pending_requests()[0]->CompleteNow(OK); |
| 276 | 276 |
| 277 EXPECT_EQ(OK, callback1.WaitForResult()); | 277 EXPECT_EQ(OK, callback1.WaitForResult()); |
| 278 EXPECT_TRUE(info.is_direct()); | 278 EXPECT_TRUE(info.is_direct()); |
| 279 | 279 |
| 280 // Fallback 1. | 280 // Fallback 1. |
| 281 TestCompletionCallback callback2; | 281 TestCompletionCallback callback2; |
| 282 rv = service->ReconsiderProxyAfterError(url, &info, &callback2, NULL, NULL); | 282 rv = service->ReconsiderProxyAfterError(url, &info, &callback2, NULL, |
| 283 BoundNetLog()); |
| 283 EXPECT_EQ(OK, rv); | 284 EXPECT_EQ(OK, rv); |
| 284 EXPECT_FALSE(info.is_direct()); | 285 EXPECT_FALSE(info.is_direct()); |
| 285 EXPECT_EQ("foobar:10", info.proxy_server().ToURI()); | 286 EXPECT_EQ("foobar:10", info.proxy_server().ToURI()); |
| 286 | 287 |
| 287 // Fallback 2. | 288 // Fallback 2. |
| 288 TestCompletionCallback callback3; | 289 TestCompletionCallback callback3; |
| 289 rv = service->ReconsiderProxyAfterError(url, &info, &callback3, NULL, NULL); | 290 rv = service->ReconsiderProxyAfterError(url, &info, &callback3, NULL, |
| 291 BoundNetLog()); |
| 290 EXPECT_EQ(OK, rv); | 292 EXPECT_EQ(OK, rv); |
| 291 EXPECT_TRUE(info.is_direct()); | 293 EXPECT_TRUE(info.is_direct()); |
| 292 | 294 |
| 293 // Fallback 3. | 295 // Fallback 3. |
| 294 TestCompletionCallback callback4; | 296 TestCompletionCallback callback4; |
| 295 rv = service->ReconsiderProxyAfterError(url, &info, &callback4, NULL, NULL); | 297 rv = service->ReconsiderProxyAfterError(url, &info, &callback4, NULL, |
| 298 BoundNetLog()); |
| 296 EXPECT_EQ(OK, rv); | 299 EXPECT_EQ(OK, rv); |
| 297 EXPECT_FALSE(info.is_direct()); | 300 EXPECT_FALSE(info.is_direct()); |
| 298 EXPECT_EQ("foobar:20", info.proxy_server().ToURI()); | 301 EXPECT_EQ("foobar:20", info.proxy_server().ToURI()); |
| 299 | 302 |
| 300 // Fallback 4 -- Nothing to fall back to! | 303 // Fallback 4 -- Nothing to fall back to! |
| 301 TestCompletionCallback callback5; | 304 TestCompletionCallback callback5; |
| 302 rv = service->ReconsiderProxyAfterError(url, &info, &callback5, NULL, NULL); | 305 rv = service->ReconsiderProxyAfterError(url, &info, &callback5, NULL, |
| 306 BoundNetLog()); |
| 303 EXPECT_EQ(ERR_FAILED, rv); | 307 EXPECT_EQ(ERR_FAILED, rv); |
| 304 EXPECT_TRUE(info.is_empty()); | 308 EXPECT_TRUE(info.is_empty()); |
| 305 } | 309 } |
| 306 | 310 |
| 307 TEST(ProxyServiceTest, ProxyResolverFails) { | 311 TEST(ProxyServiceTest, ProxyResolverFails) { |
| 308 // Test what happens when the ProxyResolver fails. The download and setting | 312 // Test what happens when the ProxyResolver fails. The download and setting |
| 309 // of the PAC script have already succeeded, so this corresponds with a | 313 // of the PAC script have already succeeded, so this corresponds with a |
| 310 // javascript runtime error while calling FindProxyForURL(). | 314 // javascript runtime error while calling FindProxyForURL(). |
| 311 | 315 |
| 312 MockProxyConfigService* config_service = | 316 MockProxyConfigService* config_service = |
| 313 new MockProxyConfigService("http://foopy/proxy.pac"); | 317 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 314 | 318 |
| 315 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; | 319 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; |
| 316 | 320 |
| 317 scoped_refptr<ProxyService> service( | 321 scoped_refptr<ProxyService> service( |
| 318 new ProxyService(config_service, resolver, NULL, BoundNetLog())); | 322 new ProxyService(config_service, resolver, NULL, NULL)); |
| 319 | 323 |
| 320 // Start first resolve request. | 324 // Start first resolve request. |
| 321 GURL url("http://www.google.com/"); | 325 GURL url("http://www.google.com/"); |
| 322 ProxyInfo info; | 326 ProxyInfo info; |
| 323 TestCompletionCallback callback1; | 327 TestCompletionCallback callback1; |
| 324 int rv = service->ResolveProxy(url, &info, &callback1, NULL, NULL); | 328 int rv = service->ResolveProxy(url, &info, &callback1, NULL, BoundNetLog()); |
| 325 EXPECT_EQ(ERR_IO_PENDING, rv); | 329 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 326 | 330 |
| 327 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 331 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| 328 resolver->pending_set_pac_script_request()->pac_url()); | 332 resolver->pending_set_pac_script_request()->pac_url()); |
| 329 resolver->pending_set_pac_script_request()->CompleteNow(OK); | 333 resolver->pending_set_pac_script_request()->CompleteNow(OK); |
| 330 | 334 |
| 331 ASSERT_EQ(1u, resolver->pending_requests().size()); | 335 ASSERT_EQ(1u, resolver->pending_requests().size()); |
| 332 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); | 336 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); |
| 333 | 337 |
| 334 // Fail the first resolve request in MockAsyncProxyResolver. | 338 // Fail the first resolve request in MockAsyncProxyResolver. |
| 335 resolver->pending_requests()[0]->CompleteNow(ERR_FAILED); | 339 resolver->pending_requests()[0]->CompleteNow(ERR_FAILED); |
| 336 | 340 |
| 337 // Although the proxy resolver failed the request, ProxyService implicitly | 341 // Although the proxy resolver failed the request, ProxyService implicitly |
| 338 // falls-back to DIRECT. | 342 // falls-back to DIRECT. |
| 339 EXPECT_EQ(OK, callback1.WaitForResult()); | 343 EXPECT_EQ(OK, callback1.WaitForResult()); |
| 340 EXPECT_TRUE(info.is_direct()); | 344 EXPECT_TRUE(info.is_direct()); |
| 341 | 345 |
| 342 // The second resolve request will try to run through the proxy resolver, | 346 // The second resolve request will try to run through the proxy resolver, |
| 343 // regardless of whether the first request failed in it. | 347 // regardless of whether the first request failed in it. |
| 344 TestCompletionCallback callback2; | 348 TestCompletionCallback callback2; |
| 345 rv = service->ResolveProxy(url, &info, &callback2, NULL, NULL); | 349 rv = service->ResolveProxy(url, &info, &callback2, NULL, BoundNetLog()); |
| 346 EXPECT_EQ(ERR_IO_PENDING, rv); | 350 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 347 | 351 |
| 348 ASSERT_EQ(1u, resolver->pending_requests().size()); | 352 ASSERT_EQ(1u, resolver->pending_requests().size()); |
| 349 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); | 353 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); |
| 350 | 354 |
| 351 // This time we will have the resolver succeed (perhaps the PAC script has | 355 // This time we will have the resolver succeed (perhaps the PAC script has |
| 352 // a dependency on the current time). | 356 // a dependency on the current time). |
| 353 resolver->pending_requests()[0]->results()->UseNamedProxy("foopy_valid:8080"); | 357 resolver->pending_requests()[0]->results()->UseNamedProxy("foopy_valid:8080"); |
| 354 resolver->pending_requests()[0]->CompleteNow(OK); | 358 resolver->pending_requests()[0]->CompleteNow(OK); |
| 355 | 359 |
| 356 EXPECT_EQ(OK, callback2.WaitForResult()); | 360 EXPECT_EQ(OK, callback2.WaitForResult()); |
| 357 EXPECT_FALSE(info.is_direct()); | 361 EXPECT_FALSE(info.is_direct()); |
| 358 EXPECT_EQ("foopy_valid:8080", info.proxy_server().ToURI()); | 362 EXPECT_EQ("foopy_valid:8080", info.proxy_server().ToURI()); |
| 359 } | 363 } |
| 360 | 364 |
| 361 TEST(ProxyServiceTest, ProxyFallback) { | 365 TEST(ProxyServiceTest, ProxyFallback) { |
| 362 // Test what happens when we specify multiple proxy servers and some of them | 366 // Test what happens when we specify multiple proxy servers and some of them |
| 363 // are bad. | 367 // are bad. |
| 364 | 368 |
| 365 MockProxyConfigService* config_service = | 369 MockProxyConfigService* config_service = |
| 366 new MockProxyConfigService("http://foopy/proxy.pac"); | 370 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 367 | 371 |
| 368 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; | 372 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; |
| 369 | 373 |
| 370 scoped_refptr<ProxyService> service( | 374 scoped_refptr<ProxyService> service( |
| 371 new ProxyService(config_service, resolver, NULL, BoundNetLog())); | 375 new ProxyService(config_service, resolver, NULL, NULL)); |
| 372 | 376 |
| 373 GURL url("http://www.google.com/"); | 377 GURL url("http://www.google.com/"); |
| 374 | 378 |
| 375 // Get the proxy information. | 379 // Get the proxy information. |
| 376 ProxyInfo info; | 380 ProxyInfo info; |
| 377 TestCompletionCallback callback1; | 381 TestCompletionCallback callback1; |
| 378 int rv = service->ResolveProxy(url, &info, &callback1, NULL, NULL); | 382 int rv = service->ResolveProxy(url, &info, &callback1, NULL, BoundNetLog()); |
| 379 EXPECT_EQ(ERR_IO_PENDING, rv); | 383 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 380 | 384 |
| 381 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 385 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| 382 resolver->pending_set_pac_script_request()->pac_url()); | 386 resolver->pending_set_pac_script_request()->pac_url()); |
| 383 resolver->pending_set_pac_script_request()->CompleteNow(OK); | 387 resolver->pending_set_pac_script_request()->CompleteNow(OK); |
| 384 | 388 |
| 385 ASSERT_EQ(1u, resolver->pending_requests().size()); | 389 ASSERT_EQ(1u, resolver->pending_requests().size()); |
| 386 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); | 390 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); |
| 387 | 391 |
| 388 // Set the result in proxy resolver. | 392 // Set the result in proxy resolver. |
| 389 resolver->pending_requests()[0]->results()->UseNamedProxy( | 393 resolver->pending_requests()[0]->results()->UseNamedProxy( |
| 390 "foopy1:8080;foopy2:9090"); | 394 "foopy1:8080;foopy2:9090"); |
| 391 resolver->pending_requests()[0]->CompleteNow(OK); | 395 resolver->pending_requests()[0]->CompleteNow(OK); |
| 392 | 396 |
| 393 // The first item is valid. | 397 // The first item is valid. |
| 394 EXPECT_EQ(OK, callback1.WaitForResult()); | 398 EXPECT_EQ(OK, callback1.WaitForResult()); |
| 395 EXPECT_FALSE(info.is_direct()); | 399 EXPECT_FALSE(info.is_direct()); |
| 396 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 400 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
| 397 | 401 |
| 398 // Fake an error on the proxy. | 402 // Fake an error on the proxy. |
| 399 TestCompletionCallback callback2; | 403 TestCompletionCallback callback2; |
| 400 rv = service->ReconsiderProxyAfterError(url, &info, &callback2, NULL, NULL); | 404 rv = service->ReconsiderProxyAfterError(url, &info, &callback2, NULL, |
| 405 BoundNetLog()); |
| 401 EXPECT_EQ(OK, rv); | 406 EXPECT_EQ(OK, rv); |
| 402 | 407 |
| 403 // The second proxy should be specified. | 408 // The second proxy should be specified. |
| 404 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); | 409 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); |
| 405 | 410 |
| 406 TestCompletionCallback callback3; | 411 TestCompletionCallback callback3; |
| 407 rv = service->ResolveProxy(url, &info, &callback3, NULL, NULL); | 412 rv = service->ResolveProxy(url, &info, &callback3, NULL, BoundNetLog()); |
| 408 EXPECT_EQ(ERR_IO_PENDING, rv); | 413 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 409 | 414 |
| 410 ASSERT_EQ(1u, resolver->pending_requests().size()); | 415 ASSERT_EQ(1u, resolver->pending_requests().size()); |
| 411 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); | 416 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); |
| 412 | 417 |
| 413 // Set the result in proxy resolver -- the second result is already known | 418 // Set the result in proxy resolver -- the second result is already known |
| 414 // to be bad, so we will not try to use it initially. | 419 // to be bad, so we will not try to use it initially. |
| 415 resolver->pending_requests()[0]->results()->UseNamedProxy( | 420 resolver->pending_requests()[0]->results()->UseNamedProxy( |
| 416 "foopy3:7070;foopy1:8080;foopy2:9090"); | 421 "foopy3:7070;foopy1:8080;foopy2:9090"); |
| 417 resolver->pending_requests()[0]->CompleteNow(OK); | 422 resolver->pending_requests()[0]->CompleteNow(OK); |
| 418 | 423 |
| 419 EXPECT_EQ(OK, callback3.WaitForResult()); | 424 EXPECT_EQ(OK, callback3.WaitForResult()); |
| 420 EXPECT_FALSE(info.is_direct()); | 425 EXPECT_FALSE(info.is_direct()); |
| 421 EXPECT_EQ("foopy3:7070", info.proxy_server().ToURI()); | 426 EXPECT_EQ("foopy3:7070", info.proxy_server().ToURI()); |
| 422 | 427 |
| 423 // We fake another error. It should now try the third one. | 428 // We fake another error. It should now try the third one. |
| 424 TestCompletionCallback callback4; | 429 TestCompletionCallback callback4; |
| 425 rv = service->ReconsiderProxyAfterError(url, &info, &callback4, NULL, NULL); | 430 rv = service->ReconsiderProxyAfterError(url, &info, &callback4, NULL, |
| 431 BoundNetLog()); |
| 426 EXPECT_EQ(OK, rv); | 432 EXPECT_EQ(OK, rv); |
| 427 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); | 433 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); |
| 428 | 434 |
| 429 // We fake another error. At this point we have tried all of the | 435 // We fake another error. At this point we have tried all of the |
| 430 // proxy servers we thought were valid; next we try the proxy server | 436 // proxy servers we thought were valid; next we try the proxy server |
| 431 // that was in our bad proxies map (foopy1:8080). | 437 // that was in our bad proxies map (foopy1:8080). |
| 432 TestCompletionCallback callback5; | 438 TestCompletionCallback callback5; |
| 433 rv = service->ReconsiderProxyAfterError(url, &info, &callback5, NULL, NULL); | 439 rv = service->ReconsiderProxyAfterError(url, &info, &callback5, NULL, |
| 440 BoundNetLog()); |
| 434 EXPECT_EQ(OK, rv); | 441 EXPECT_EQ(OK, rv); |
| 435 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 442 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
| 436 | 443 |
| 437 // Fake another error, the last proxy is gone, the list should now be empty, | 444 // Fake another error, the last proxy is gone, the list should now be empty, |
| 438 // so there is nothing left to try. | 445 // so there is nothing left to try. |
| 439 TestCompletionCallback callback6; | 446 TestCompletionCallback callback6; |
| 440 rv = service->ReconsiderProxyAfterError(url, &info, &callback6, NULL, NULL); | 447 rv = service->ReconsiderProxyAfterError(url, &info, &callback6, NULL, |
| 448 BoundNetLog()); |
| 441 EXPECT_EQ(ERR_FAILED, rv); | 449 EXPECT_EQ(ERR_FAILED, rv); |
| 442 EXPECT_FALSE(info.is_direct()); | 450 EXPECT_FALSE(info.is_direct()); |
| 443 EXPECT_TRUE(info.is_empty()); | 451 EXPECT_TRUE(info.is_empty()); |
| 444 | 452 |
| 445 // TODO(nsylvain): Test that the proxy can be retried after the delay. | 453 // TODO(nsylvain): Test that the proxy can be retried after the delay. |
| 446 } | 454 } |
| 447 | 455 |
| 448 // This test is similar to ProxyFallback, but this time we have an explicit | 456 // This test is similar to ProxyFallback, but this time we have an explicit |
| 449 // fallback choice to DIRECT. | 457 // fallback choice to DIRECT. |
| 450 TEST(ProxyServiceTest, ProxyFallbackToDirect) { | 458 TEST(ProxyServiceTest, ProxyFallbackToDirect) { |
| 451 MockProxyConfigService* config_service = | 459 MockProxyConfigService* config_service = |
| 452 new MockProxyConfigService("http://foopy/proxy.pac"); | 460 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 453 | 461 |
| 454 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; | 462 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; |
| 455 | 463 |
| 456 scoped_refptr<ProxyService> service( | 464 scoped_refptr<ProxyService> service( |
| 457 new ProxyService(config_service, resolver, NULL, BoundNetLog())); | 465 new ProxyService(config_service, resolver, NULL, NULL)); |
| 458 | 466 |
| 459 GURL url("http://www.google.com/"); | 467 GURL url("http://www.google.com/"); |
| 460 | 468 |
| 461 // Get the proxy information. | 469 // Get the proxy information. |
| 462 ProxyInfo info; | 470 ProxyInfo info; |
| 463 TestCompletionCallback callback1; | 471 TestCompletionCallback callback1; |
| 464 int rv = service->ResolveProxy(url, &info, &callback1, NULL, NULL); | 472 int rv = service->ResolveProxy(url, &info, &callback1, NULL, BoundNetLog()); |
| 465 EXPECT_EQ(ERR_IO_PENDING, rv); | 473 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 466 | 474 |
| 467 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 475 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| 468 resolver->pending_set_pac_script_request()->pac_url()); | 476 resolver->pending_set_pac_script_request()->pac_url()); |
| 469 resolver->pending_set_pac_script_request()->CompleteNow(OK); | 477 resolver->pending_set_pac_script_request()->CompleteNow(OK); |
| 470 | 478 |
| 471 ASSERT_EQ(1u, resolver->pending_requests().size()); | 479 ASSERT_EQ(1u, resolver->pending_requests().size()); |
| 472 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); | 480 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); |
| 473 | 481 |
| 474 // Set the result in proxy resolver. | 482 // Set the result in proxy resolver. |
| 475 resolver->pending_requests()[0]->results()->UsePacString( | 483 resolver->pending_requests()[0]->results()->UsePacString( |
| 476 "PROXY foopy1:8080; PROXY foopy2:9090; DIRECT"); | 484 "PROXY foopy1:8080; PROXY foopy2:9090; DIRECT"); |
| 477 resolver->pending_requests()[0]->CompleteNow(OK); | 485 resolver->pending_requests()[0]->CompleteNow(OK); |
| 478 | 486 |
| 479 // Get the first result. | 487 // Get the first result. |
| 480 EXPECT_EQ(OK, callback1.WaitForResult()); | 488 EXPECT_EQ(OK, callback1.WaitForResult()); |
| 481 EXPECT_FALSE(info.is_direct()); | 489 EXPECT_FALSE(info.is_direct()); |
| 482 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 490 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
| 483 | 491 |
| 484 // Fake an error on the proxy. | 492 // Fake an error on the proxy. |
| 485 TestCompletionCallback callback2; | 493 TestCompletionCallback callback2; |
| 486 rv = service->ReconsiderProxyAfterError(url, &info, &callback2, NULL, NULL); | 494 rv = service->ReconsiderProxyAfterError(url, &info, &callback2, NULL, |
| 495 BoundNetLog()); |
| 487 EXPECT_EQ(OK, rv); | 496 EXPECT_EQ(OK, rv); |
| 488 | 497 |
| 489 // Now we get back the second proxy. | 498 // Now we get back the second proxy. |
| 490 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); | 499 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); |
| 491 | 500 |
| 492 // Fake an error on this proxy as well. | 501 // Fake an error on this proxy as well. |
| 493 TestCompletionCallback callback3; | 502 TestCompletionCallback callback3; |
| 494 rv = service->ReconsiderProxyAfterError(url, &info, &callback3, NULL, NULL); | 503 rv = service->ReconsiderProxyAfterError(url, &info, &callback3, NULL, |
| 504 BoundNetLog()); |
| 495 EXPECT_EQ(OK, rv); | 505 EXPECT_EQ(OK, rv); |
| 496 | 506 |
| 497 // Finally, we get back DIRECT. | 507 // Finally, we get back DIRECT. |
| 498 EXPECT_TRUE(info.is_direct()); | 508 EXPECT_TRUE(info.is_direct()); |
| 499 | 509 |
| 500 // Now we tell the proxy service that even DIRECT failed. | 510 // Now we tell the proxy service that even DIRECT failed. |
| 501 TestCompletionCallback callback4; | 511 TestCompletionCallback callback4; |
| 502 rv = service->ReconsiderProxyAfterError(url, &info, &callback4, NULL, NULL); | 512 rv = service->ReconsiderProxyAfterError(url, &info, &callback4, NULL, |
| 513 BoundNetLog()); |
| 503 // There was nothing left to try after DIRECT, so we are out of | 514 // There was nothing left to try after DIRECT, so we are out of |
| 504 // choices. | 515 // choices. |
| 505 EXPECT_EQ(ERR_FAILED, rv); | 516 EXPECT_EQ(ERR_FAILED, rv); |
| 506 } | 517 } |
| 507 | 518 |
| 508 TEST(ProxyServiceTest, ProxyFallback_NewSettings) { | 519 TEST(ProxyServiceTest, ProxyFallback_NewSettings) { |
| 509 // Test proxy failover when new settings are available. | 520 // Test proxy failover when new settings are available. |
| 510 | 521 |
| 511 MockProxyConfigService* config_service = | 522 MockProxyConfigService* config_service = |
| 512 new MockProxyConfigService("http://foopy/proxy.pac"); | 523 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 513 | 524 |
| 514 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; | 525 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; |
| 515 | 526 |
| 516 scoped_refptr<ProxyService> service( | 527 scoped_refptr<ProxyService> service( |
| 517 new ProxyService(config_service, resolver, NULL, BoundNetLog())); | 528 new ProxyService(config_service, resolver, NULL, NULL)); |
| 518 | 529 |
| 519 GURL url("http://www.google.com/"); | 530 GURL url("http://www.google.com/"); |
| 520 | 531 |
| 521 // Get the proxy information. | 532 // Get the proxy information. |
| 522 ProxyInfo info; | 533 ProxyInfo info; |
| 523 TestCompletionCallback callback1; | 534 TestCompletionCallback callback1; |
| 524 int rv = service->ResolveProxy(url, &info, &callback1, NULL, NULL); | 535 int rv = service->ResolveProxy(url, &info, &callback1, NULL, BoundNetLog()); |
| 525 EXPECT_EQ(ERR_IO_PENDING, rv); | 536 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 526 | 537 |
| 527 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 538 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| 528 resolver->pending_set_pac_script_request()->pac_url()); | 539 resolver->pending_set_pac_script_request()->pac_url()); |
| 529 resolver->pending_set_pac_script_request()->CompleteNow(OK); | 540 resolver->pending_set_pac_script_request()->CompleteNow(OK); |
| 530 | 541 |
| 531 ASSERT_EQ(1u, resolver->pending_requests().size()); | 542 ASSERT_EQ(1u, resolver->pending_requests().size()); |
| 532 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); | 543 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); |
| 533 | 544 |
| 534 // Set the result in proxy resolver. | 545 // Set the result in proxy resolver. |
| 535 resolver->pending_requests()[0]->results()->UseNamedProxy( | 546 resolver->pending_requests()[0]->results()->UseNamedProxy( |
| 536 "foopy1:8080;foopy2:9090"); | 547 "foopy1:8080;foopy2:9090"); |
| 537 resolver->pending_requests()[0]->CompleteNow(OK); | 548 resolver->pending_requests()[0]->CompleteNow(OK); |
| 538 | 549 |
| 539 // The first item is valid. | 550 // The first item is valid. |
| 540 EXPECT_EQ(OK, callback1.WaitForResult()); | 551 EXPECT_EQ(OK, callback1.WaitForResult()); |
| 541 EXPECT_FALSE(info.is_direct()); | 552 EXPECT_FALSE(info.is_direct()); |
| 542 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 553 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
| 543 | 554 |
| 544 // Fake an error on the proxy, and also a new configuration on the proxy. | 555 // Fake an error on the proxy, and also a new configuration on the proxy. |
| 545 config_service->config = ProxyConfig(); | 556 config_service->config = ProxyConfig(); |
| 546 config_service->config.set_pac_url(GURL("http://foopy-new/proxy.pac")); | 557 config_service->config.set_pac_url(GURL("http://foopy-new/proxy.pac")); |
| 547 | 558 |
| 548 TestCompletionCallback callback2; | 559 TestCompletionCallback callback2; |
| 549 rv = service->ReconsiderProxyAfterError(url, &info, &callback2, NULL, NULL); | 560 rv = service->ReconsiderProxyAfterError(url, &info, &callback2, NULL, |
| 561 BoundNetLog()); |
| 550 EXPECT_EQ(ERR_IO_PENDING, rv); | 562 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 551 | 563 |
| 552 EXPECT_EQ(GURL("http://foopy-new/proxy.pac"), | 564 EXPECT_EQ(GURL("http://foopy-new/proxy.pac"), |
| 553 resolver->pending_set_pac_script_request()->pac_url()); | 565 resolver->pending_set_pac_script_request()->pac_url()); |
| 554 resolver->pending_set_pac_script_request()->CompleteNow(OK); | 566 resolver->pending_set_pac_script_request()->CompleteNow(OK); |
| 555 | 567 |
| 556 ASSERT_EQ(1u, resolver->pending_requests().size()); | 568 ASSERT_EQ(1u, resolver->pending_requests().size()); |
| 557 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); | 569 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); |
| 558 | 570 |
| 559 resolver->pending_requests()[0]->results()->UseNamedProxy( | 571 resolver->pending_requests()[0]->results()->UseNamedProxy( |
| 560 "foopy1:8080;foopy2:9090"); | 572 "foopy1:8080;foopy2:9090"); |
| 561 resolver->pending_requests()[0]->CompleteNow(OK); | 573 resolver->pending_requests()[0]->CompleteNow(OK); |
| 562 | 574 |
| 563 // The first proxy is still there since the configuration changed. | 575 // The first proxy is still there since the configuration changed. |
| 564 EXPECT_EQ(OK, callback2.WaitForResult()); | 576 EXPECT_EQ(OK, callback2.WaitForResult()); |
| 565 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 577 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
| 566 | 578 |
| 567 // We fake another error. It should now ignore the first one. | 579 // We fake another error. It should now ignore the first one. |
| 568 TestCompletionCallback callback3; | 580 TestCompletionCallback callback3; |
| 569 rv = service->ReconsiderProxyAfterError(url, &info, &callback3, NULL, NULL); | 581 rv = service->ReconsiderProxyAfterError(url, &info, &callback3, NULL, |
| 582 BoundNetLog()); |
| 570 EXPECT_EQ(OK, rv); | 583 EXPECT_EQ(OK, rv); |
| 571 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); | 584 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); |
| 572 | 585 |
| 573 // We simulate a new configuration. | 586 // We simulate a new configuration. |
| 574 config_service->config = ProxyConfig(); | 587 config_service->config = ProxyConfig(); |
| 575 config_service->config.set_pac_url(GURL("http://foopy-new2/proxy.pac")); | 588 config_service->config.set_pac_url(GURL("http://foopy-new2/proxy.pac")); |
| 576 | 589 |
| 577 // We fake another error. It should go back to the first proxy. | 590 // We fake another error. It should go back to the first proxy. |
| 578 TestCompletionCallback callback4; | 591 TestCompletionCallback callback4; |
| 579 rv = service->ReconsiderProxyAfterError(url, &info, &callback4, NULL, NULL); | 592 rv = service->ReconsiderProxyAfterError(url, &info, &callback4, NULL, |
| 593 BoundNetLog()); |
| 580 EXPECT_EQ(ERR_IO_PENDING, rv); | 594 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 581 | 595 |
| 582 EXPECT_EQ(GURL("http://foopy-new2/proxy.pac"), | 596 EXPECT_EQ(GURL("http://foopy-new2/proxy.pac"), |
| 583 resolver->pending_set_pac_script_request()->pac_url()); | 597 resolver->pending_set_pac_script_request()->pac_url()); |
| 584 resolver->pending_set_pac_script_request()->CompleteNow(OK); | 598 resolver->pending_set_pac_script_request()->CompleteNow(OK); |
| 585 | 599 |
| 586 ASSERT_EQ(1u, resolver->pending_requests().size()); | 600 ASSERT_EQ(1u, resolver->pending_requests().size()); |
| 587 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); | 601 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); |
| 588 | 602 |
| 589 resolver->pending_requests()[0]->results()->UseNamedProxy( | 603 resolver->pending_requests()[0]->results()->UseNamedProxy( |
| 590 "foopy1:8080;foopy2:9090"); | 604 "foopy1:8080;foopy2:9090"); |
| 591 resolver->pending_requests()[0]->CompleteNow(OK); | 605 resolver->pending_requests()[0]->CompleteNow(OK); |
| 592 | 606 |
| 593 EXPECT_EQ(OK, callback4.WaitForResult()); | 607 EXPECT_EQ(OK, callback4.WaitForResult()); |
| 594 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 608 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
| 595 } | 609 } |
| 596 | 610 |
| 597 TEST(ProxyServiceTest, ProxyFallback_BadConfig) { | 611 TEST(ProxyServiceTest, ProxyFallback_BadConfig) { |
| 598 // Test proxy failover when the configuration is bad. | 612 // Test proxy failover when the configuration is bad. |
| 599 | 613 |
| 600 MockProxyConfigService* config_service = | 614 MockProxyConfigService* config_service = |
| 601 new MockProxyConfigService("http://foopy/proxy.pac"); | 615 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 602 | 616 |
| 603 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; | 617 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; |
| 604 | 618 |
| 605 scoped_refptr<ProxyService> service( | 619 scoped_refptr<ProxyService> service( |
| 606 new ProxyService(config_service, resolver, NULL, BoundNetLog())); | 620 new ProxyService(config_service, resolver, NULL, NULL)); |
| 607 | 621 |
| 608 GURL url("http://www.google.com/"); | 622 GURL url("http://www.google.com/"); |
| 609 | 623 |
| 610 // Get the proxy information. | 624 // Get the proxy information. |
| 611 ProxyInfo info; | 625 ProxyInfo info; |
| 612 TestCompletionCallback callback1; | 626 TestCompletionCallback callback1; |
| 613 int rv = service->ResolveProxy(url, &info, &callback1, NULL, NULL); | 627 int rv = service->ResolveProxy(url, &info, &callback1, NULL, BoundNetLog()); |
| 614 EXPECT_EQ(ERR_IO_PENDING, rv); | 628 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 615 | 629 |
| 616 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 630 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| 617 resolver->pending_set_pac_script_request()->pac_url()); | 631 resolver->pending_set_pac_script_request()->pac_url()); |
| 618 resolver->pending_set_pac_script_request()->CompleteNow(OK); | 632 resolver->pending_set_pac_script_request()->CompleteNow(OK); |
| 619 ASSERT_EQ(1u, resolver->pending_requests().size()); | 633 ASSERT_EQ(1u, resolver->pending_requests().size()); |
| 620 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); | 634 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); |
| 621 | 635 |
| 622 resolver->pending_requests()[0]->results()->UseNamedProxy( | 636 resolver->pending_requests()[0]->results()->UseNamedProxy( |
| 623 "foopy1:8080;foopy2:9090"); | 637 "foopy1:8080;foopy2:9090"); |
| 624 resolver->pending_requests()[0]->CompleteNow(OK); | 638 resolver->pending_requests()[0]->CompleteNow(OK); |
| 625 | 639 |
| 626 // The first item is valid. | 640 // The first item is valid. |
| 627 EXPECT_EQ(OK, callback1.WaitForResult()); | 641 EXPECT_EQ(OK, callback1.WaitForResult()); |
| 628 EXPECT_FALSE(info.is_direct()); | 642 EXPECT_FALSE(info.is_direct()); |
| 629 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 643 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
| 630 | 644 |
| 631 // Fake a proxy error. | 645 // Fake a proxy error. |
| 632 TestCompletionCallback callback2; | 646 TestCompletionCallback callback2; |
| 633 rv = service->ReconsiderProxyAfterError(url, &info, &callback2, NULL, NULL); | 647 rv = service->ReconsiderProxyAfterError(url, &info, &callback2, NULL, |
| 648 BoundNetLog()); |
| 634 EXPECT_EQ(OK, rv); | 649 EXPECT_EQ(OK, rv); |
| 635 | 650 |
| 636 // The first proxy is ignored, and the second one is selected. | 651 // The first proxy is ignored, and the second one is selected. |
| 637 EXPECT_FALSE(info.is_direct()); | 652 EXPECT_FALSE(info.is_direct()); |
| 638 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); | 653 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); |
| 639 | 654 |
| 640 // Fake a PAC failure. | 655 // Fake a PAC failure. |
| 641 ProxyInfo info2; | 656 ProxyInfo info2; |
| 642 TestCompletionCallback callback3; | 657 TestCompletionCallback callback3; |
| 643 rv = service->ResolveProxy(url, &info2, &callback3, NULL, NULL); | 658 rv = service->ResolveProxy(url, &info2, &callback3, NULL, BoundNetLog()); |
| 644 EXPECT_EQ(ERR_IO_PENDING, rv); | 659 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 645 | 660 |
| 646 ASSERT_EQ(1u, resolver->pending_requests().size()); | 661 ASSERT_EQ(1u, resolver->pending_requests().size()); |
| 647 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); | 662 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); |
| 648 | 663 |
| 649 // This simulates a javascript runtime error in the PAC script. | 664 // This simulates a javascript runtime error in the PAC script. |
| 650 resolver->pending_requests()[0]->CompleteNow(ERR_FAILED); | 665 resolver->pending_requests()[0]->CompleteNow(ERR_FAILED); |
| 651 | 666 |
| 652 // Although the resolver failed, the ProxyService will implicitly fall-back | 667 // Although the resolver failed, the ProxyService will implicitly fall-back |
| 653 // to a DIRECT connection. | 668 // to a DIRECT connection. |
| 654 EXPECT_EQ(OK, callback3.WaitForResult()); | 669 EXPECT_EQ(OK, callback3.WaitForResult()); |
| 655 EXPECT_TRUE(info2.is_direct()); | 670 EXPECT_TRUE(info2.is_direct()); |
| 656 EXPECT_FALSE(info2.is_empty()); | 671 EXPECT_FALSE(info2.is_empty()); |
| 657 | 672 |
| 658 // The PAC script will work properly next time and successfully return a | 673 // The PAC script will work properly next time and successfully return a |
| 659 // proxy list. Since we have not marked the configuration as bad, it should | 674 // proxy list. Since we have not marked the configuration as bad, it should |
| 660 // "just work" the next time we call it. | 675 // "just work" the next time we call it. |
| 661 ProxyInfo info3; | 676 ProxyInfo info3; |
| 662 TestCompletionCallback callback4; | 677 TestCompletionCallback callback4; |
| 663 rv = service->ReconsiderProxyAfterError(url, &info3, &callback4, NULL, NULL); | 678 rv = service->ReconsiderProxyAfterError(url, &info3, &callback4, NULL, |
| 679 BoundNetLog()); |
| 664 EXPECT_EQ(ERR_IO_PENDING, rv); | 680 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 665 | 681 |
| 666 ASSERT_EQ(1u, resolver->pending_requests().size()); | 682 ASSERT_EQ(1u, resolver->pending_requests().size()); |
| 667 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); | 683 EXPECT_EQ(url, resolver->pending_requests()[0]->url()); |
| 668 | 684 |
| 669 resolver->pending_requests()[0]->results()->UseNamedProxy( | 685 resolver->pending_requests()[0]->results()->UseNamedProxy( |
| 670 "foopy1:8080;foopy2:9090"); | 686 "foopy1:8080;foopy2:9090"); |
| 671 resolver->pending_requests()[0]->CompleteNow(OK); | 687 resolver->pending_requests()[0]->CompleteNow(OK); |
| 672 | 688 |
| 673 // The first proxy is not there since the it was added to the bad proxies | 689 // The first proxy is not there since the it was added to the bad proxies |
| 674 // list by the earlier ReconsiderProxyAfterError(). | 690 // list by the earlier ReconsiderProxyAfterError(). |
| 675 EXPECT_EQ(OK, callback4.WaitForResult()); | 691 EXPECT_EQ(OK, callback4.WaitForResult()); |
| 676 EXPECT_FALSE(info3.is_direct()); | 692 EXPECT_FALSE(info3.is_direct()); |
| 677 EXPECT_EQ("foopy1:8080", info3.proxy_server().ToURI()); | 693 EXPECT_EQ("foopy1:8080", info3.proxy_server().ToURI()); |
| 678 } | 694 } |
| 679 | 695 |
| 680 TEST(ProxyServiceTest, ProxyBypassList) { | 696 TEST(ProxyServiceTest, ProxyBypassList) { |
| 681 // Test that the proxy bypass rules are consulted. | 697 // Test that the proxy bypass rules are consulted. |
| 682 | 698 |
| 683 TestCompletionCallback callback[2]; | 699 TestCompletionCallback callback[2]; |
| 684 ProxyInfo info[2]; | 700 ProxyInfo info[2]; |
| 685 ProxyConfig config; | 701 ProxyConfig config; |
| 686 config.proxy_rules().ParseFromString("foopy1:8080;foopy2:9090"); | 702 config.proxy_rules().ParseFromString("foopy1:8080;foopy2:9090"); |
| 687 config.set_auto_detect(false); | 703 config.set_auto_detect(false); |
| 688 config.proxy_rules().bypass_rules.ParseFromString("*.org"); | 704 config.proxy_rules().bypass_rules.ParseFromString("*.org"); |
| 689 | 705 |
| 690 scoped_refptr<ProxyService> service(new ProxyService( | 706 scoped_refptr<ProxyService> service(new ProxyService( |
| 691 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL, | 707 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL, |
| 692 BoundNetLog())); | 708 NULL)); |
| 693 | 709 |
| 694 int rv; | 710 int rv; |
| 695 GURL url1("http://www.webkit.org"); | 711 GURL url1("http://www.webkit.org"); |
| 696 GURL url2("http://www.webkit.com"); | 712 GURL url2("http://www.webkit.com"); |
| 697 | 713 |
| 698 // Request for a .org domain should bypass proxy. | 714 // Request for a .org domain should bypass proxy. |
| 699 rv = service->ResolveProxy(url1, &info[0], &callback[0], NULL, NULL); | 715 rv = service->ResolveProxy(url1, &info[0], &callback[0], NULL, BoundNetLog()); |
| 700 EXPECT_EQ(OK, rv); | 716 EXPECT_EQ(OK, rv); |
| 701 EXPECT_TRUE(info[0].is_direct()); | 717 EXPECT_TRUE(info[0].is_direct()); |
| 702 | 718 |
| 703 // Request for a .com domain hits the proxy. | 719 // Request for a .com domain hits the proxy. |
| 704 rv = service->ResolveProxy(url2, &info[1], &callback[1], NULL, NULL); | 720 rv = service->ResolveProxy(url2, &info[1], &callback[1], NULL, BoundNetLog()); |
| 705 EXPECT_EQ(OK, rv); | 721 EXPECT_EQ(OK, rv); |
| 706 EXPECT_EQ("foopy1:8080", info[1].proxy_server().ToURI()); | 722 EXPECT_EQ("foopy1:8080", info[1].proxy_server().ToURI()); |
| 707 } | 723 } |
| 708 | 724 |
| 709 | 725 |
| 710 TEST(ProxyServiceTest, PerProtocolProxyTests) { | 726 TEST(ProxyServiceTest, PerProtocolProxyTests) { |
| 711 ProxyConfig config; | 727 ProxyConfig config; |
| 712 config.proxy_rules().ParseFromString("http=foopy1:8080;https=foopy2:8080"); | 728 config.proxy_rules().ParseFromString("http=foopy1:8080;https=foopy2:8080"); |
| 713 config.set_auto_detect(false); | 729 config.set_auto_detect(false); |
| 714 { | 730 { |
| 715 scoped_refptr<ProxyService> service(new ProxyService( | 731 scoped_refptr<ProxyService> service(new ProxyService( |
| 716 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL, | 732 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL, |
| 717 BoundNetLog())); | 733 NULL)); |
| 718 GURL test_url("http://www.msn.com"); | 734 GURL test_url("http://www.msn.com"); |
| 719 ProxyInfo info; | 735 ProxyInfo info; |
| 720 TestCompletionCallback callback; | 736 TestCompletionCallback callback; |
| 721 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); | 737 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, |
| 738 BoundNetLog()); |
| 722 EXPECT_EQ(OK, rv); | 739 EXPECT_EQ(OK, rv); |
| 723 EXPECT_FALSE(info.is_direct()); | 740 EXPECT_FALSE(info.is_direct()); |
| 724 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 741 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
| 725 } | 742 } |
| 726 { | 743 { |
| 727 scoped_refptr<ProxyService> service(new ProxyService( | 744 scoped_refptr<ProxyService> service(new ProxyService( |
| 728 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL, | 745 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL, |
| 729 BoundNetLog())); | 746 NULL)); |
| 730 GURL test_url("ftp://ftp.google.com"); | 747 GURL test_url("ftp://ftp.google.com"); |
| 731 ProxyInfo info; | 748 ProxyInfo info; |
| 732 TestCompletionCallback callback; | 749 TestCompletionCallback callback; |
| 733 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); | 750 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, |
| 751 BoundNetLog()); |
| 734 EXPECT_EQ(OK, rv); | 752 EXPECT_EQ(OK, rv); |
| 735 EXPECT_TRUE(info.is_direct()); | 753 EXPECT_TRUE(info.is_direct()); |
| 736 EXPECT_EQ("direct://", info.proxy_server().ToURI()); | 754 EXPECT_EQ("direct://", info.proxy_server().ToURI()); |
| 737 } | 755 } |
| 738 { | 756 { |
| 739 scoped_refptr<ProxyService> service(new ProxyService( | 757 scoped_refptr<ProxyService> service(new ProxyService( |
| 740 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL, | 758 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL, |
| 741 BoundNetLog())); | 759 NULL)); |
| 742 GURL test_url("https://webbranch.techcu.com"); | 760 GURL test_url("https://webbranch.techcu.com"); |
| 743 ProxyInfo info; | 761 ProxyInfo info; |
| 744 TestCompletionCallback callback; | 762 TestCompletionCallback callback; |
| 745 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); | 763 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, |
| 764 BoundNetLog()); |
| 746 EXPECT_EQ(OK, rv); | 765 EXPECT_EQ(OK, rv); |
| 747 EXPECT_FALSE(info.is_direct()); | 766 EXPECT_FALSE(info.is_direct()); |
| 748 EXPECT_EQ("foopy2:8080", info.proxy_server().ToURI()); | 767 EXPECT_EQ("foopy2:8080", info.proxy_server().ToURI()); |
| 749 } | 768 } |
| 750 { | 769 { |
| 751 config.proxy_rules().ParseFromString("foopy1:8080"); | 770 config.proxy_rules().ParseFromString("foopy1:8080"); |
| 752 scoped_refptr<ProxyService> service(new ProxyService( | 771 scoped_refptr<ProxyService> service(new ProxyService( |
| 753 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL, | 772 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL, |
| 754 BoundNetLog())); | 773 NULL)); |
| 755 GURL test_url("http://www.microsoft.com"); | 774 GURL test_url("http://www.microsoft.com"); |
| 756 ProxyInfo info; | 775 ProxyInfo info; |
| 757 TestCompletionCallback callback; | 776 TestCompletionCallback callback; |
| 758 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); | 777 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, |
| 778 BoundNetLog()); |
| 759 EXPECT_EQ(OK, rv); | 779 EXPECT_EQ(OK, rv); |
| 760 EXPECT_FALSE(info.is_direct()); | 780 EXPECT_FALSE(info.is_direct()); |
| 761 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 781 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
| 762 } | 782 } |
| 763 } | 783 } |
| 764 | 784 |
| 765 // If only HTTP and a SOCKS proxy are specified, check if ftp/https queries | 785 // If only HTTP and a SOCKS proxy are specified, check if ftp/https queries |
| 766 // fall back to the SOCKS proxy. | 786 // fall back to the SOCKS proxy. |
| 767 TEST(ProxyServiceTest, DefaultProxyFallbackToSOCKS) { | 787 TEST(ProxyServiceTest, DefaultProxyFallbackToSOCKS) { |
| 768 ProxyConfig config; | 788 ProxyConfig config; |
| 769 config.proxy_rules().ParseFromString("http=foopy1:8080;socks=foopy2:1080"); | 789 config.proxy_rules().ParseFromString("http=foopy1:8080;socks=foopy2:1080"); |
| 770 config.set_auto_detect(false); | 790 config.set_auto_detect(false); |
| 771 EXPECT_EQ(ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, | 791 EXPECT_EQ(ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, |
| 772 config.proxy_rules().type); | 792 config.proxy_rules().type); |
| 773 | 793 |
| 774 { | 794 { |
| 775 scoped_refptr<ProxyService> service(new ProxyService( | 795 scoped_refptr<ProxyService> service(new ProxyService( |
| 776 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL, | 796 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL, |
| 777 BoundNetLog())); | 797 NULL)); |
| 778 GURL test_url("http://www.msn.com"); | 798 GURL test_url("http://www.msn.com"); |
| 779 ProxyInfo info; | 799 ProxyInfo info; |
| 780 TestCompletionCallback callback; | 800 TestCompletionCallback callback; |
| 781 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); | 801 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, |
| 802 BoundNetLog()); |
| 782 EXPECT_EQ(OK, rv); | 803 EXPECT_EQ(OK, rv); |
| 783 EXPECT_FALSE(info.is_direct()); | 804 EXPECT_FALSE(info.is_direct()); |
| 784 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 805 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
| 785 } | 806 } |
| 786 { | 807 { |
| 787 scoped_refptr<ProxyService> service(new ProxyService( | 808 scoped_refptr<ProxyService> service(new ProxyService( |
| 788 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL, | 809 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL, |
| 789 BoundNetLog())); | 810 NULL)); |
| 790 GURL test_url("ftp://ftp.google.com"); | 811 GURL test_url("ftp://ftp.google.com"); |
| 791 ProxyInfo info; | 812 ProxyInfo info; |
| 792 TestCompletionCallback callback; | 813 TestCompletionCallback callback; |
| 793 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); | 814 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, |
| 815 BoundNetLog()); |
| 794 EXPECT_EQ(OK, rv); | 816 EXPECT_EQ(OK, rv); |
| 795 EXPECT_FALSE(info.is_direct()); | 817 EXPECT_FALSE(info.is_direct()); |
| 796 EXPECT_EQ("socks4://foopy2:1080", info.proxy_server().ToURI()); | 818 EXPECT_EQ("socks4://foopy2:1080", info.proxy_server().ToURI()); |
| 797 } | 819 } |
| 798 { | 820 { |
| 799 scoped_refptr<ProxyService> service(new ProxyService( | 821 scoped_refptr<ProxyService> service(new ProxyService( |
| 800 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL, | 822 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL, |
| 801 BoundNetLog())); | 823 NULL)); |
| 802 GURL test_url("https://webbranch.techcu.com"); | 824 GURL test_url("https://webbranch.techcu.com"); |
| 803 ProxyInfo info; | 825 ProxyInfo info; |
| 804 TestCompletionCallback callback; | 826 TestCompletionCallback callback; |
| 805 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); | 827 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, |
| 828 BoundNetLog()); |
| 806 EXPECT_EQ(OK, rv); | 829 EXPECT_EQ(OK, rv); |
| 807 EXPECT_FALSE(info.is_direct()); | 830 EXPECT_FALSE(info.is_direct()); |
| 808 EXPECT_EQ("socks4://foopy2:1080", info.proxy_server().ToURI()); | 831 EXPECT_EQ("socks4://foopy2:1080", info.proxy_server().ToURI()); |
| 809 } | 832 } |
| 810 { | 833 { |
| 811 scoped_refptr<ProxyService> service(new ProxyService( | 834 scoped_refptr<ProxyService> service(new ProxyService( |
| 812 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL, | 835 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL, |
| 813 BoundNetLog())); | 836 NULL)); |
| 814 GURL test_url("unknown://www.microsoft.com"); | 837 GURL test_url("unknown://www.microsoft.com"); |
| 815 ProxyInfo info; | 838 ProxyInfo info; |
| 816 TestCompletionCallback callback; | 839 TestCompletionCallback callback; |
| 817 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); | 840 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, |
| 841 BoundNetLog()); |
| 818 EXPECT_EQ(OK, rv); | 842 EXPECT_EQ(OK, rv); |
| 819 EXPECT_FALSE(info.is_direct()); | 843 EXPECT_FALSE(info.is_direct()); |
| 820 EXPECT_EQ("socks4://foopy2:1080", info.proxy_server().ToURI()); | 844 EXPECT_EQ("socks4://foopy2:1080", info.proxy_server().ToURI()); |
| 821 } | 845 } |
| 822 } | 846 } |
| 823 | 847 |
| 824 // Test cancellation of an in-progress request. | 848 // Test cancellation of an in-progress request. |
| 825 TEST(ProxyServiceTest, CancelInProgressRequest) { | 849 TEST(ProxyServiceTest, CancelInProgressRequest) { |
| 826 MockProxyConfigService* config_service = | 850 MockProxyConfigService* config_service = |
| 827 new MockProxyConfigService("http://foopy/proxy.pac"); | 851 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 828 | 852 |
| 829 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; | 853 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; |
| 830 | 854 |
| 831 scoped_refptr<ProxyService> service( | 855 scoped_refptr<ProxyService> service( |
| 832 new ProxyService(config_service, resolver, NULL, BoundNetLog())); | 856 new ProxyService(config_service, resolver, NULL, NULL)); |
| 833 | 857 |
| 834 // Start 3 requests. | 858 // Start 3 requests. |
| 835 | 859 |
| 836 ProxyInfo info1; | 860 ProxyInfo info1; |
| 837 TestCompletionCallback callback1; | 861 TestCompletionCallback callback1; |
| 838 int rv = service->ResolveProxy( | 862 int rv = service->ResolveProxy( |
| 839 GURL("http://request1"), &info1, &callback1, NULL, NULL); | 863 GURL("http://request1"), &info1, &callback1, NULL, BoundNetLog()); |
| 840 EXPECT_EQ(ERR_IO_PENDING, rv); | 864 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 841 | 865 |
| 842 // Nothing has been sent to the proxy resolver yet, since the proxy | 866 // Nothing has been sent to the proxy resolver yet, since the proxy |
| 843 // resolver has not been configured yet. | 867 // resolver has not been configured yet. |
| 844 ASSERT_EQ(0u, resolver->pending_requests().size()); | 868 ASSERT_EQ(0u, resolver->pending_requests().size()); |
| 845 | 869 |
| 846 // Successfully initialize the PAC script. | 870 // Successfully initialize the PAC script. |
| 847 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 871 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| 848 resolver->pending_set_pac_script_request()->pac_url()); | 872 resolver->pending_set_pac_script_request()->pac_url()); |
| 849 resolver->pending_set_pac_script_request()->CompleteNow(OK); | 873 resolver->pending_set_pac_script_request()->CompleteNow(OK); |
| 850 | 874 |
| 851 ASSERT_EQ(1u, resolver->pending_requests().size()); | 875 ASSERT_EQ(1u, resolver->pending_requests().size()); |
| 852 EXPECT_EQ(GURL("http://request1"), resolver->pending_requests()[0]->url()); | 876 EXPECT_EQ(GURL("http://request1"), resolver->pending_requests()[0]->url()); |
| 853 | 877 |
| 854 ProxyInfo info2; | 878 ProxyInfo info2; |
| 855 TestCompletionCallback callback2; | 879 TestCompletionCallback callback2; |
| 856 ProxyService::PacRequest* request2; | 880 ProxyService::PacRequest* request2; |
| 857 rv = service->ResolveProxy( | 881 rv = service->ResolveProxy( |
| 858 GURL("http://request2"), &info2, &callback2, &request2, NULL); | 882 GURL("http://request2"), &info2, &callback2, &request2, BoundNetLog()); |
| 859 EXPECT_EQ(ERR_IO_PENDING, rv); | 883 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 860 ASSERT_EQ(2u, resolver->pending_requests().size()); | 884 ASSERT_EQ(2u, resolver->pending_requests().size()); |
| 861 EXPECT_EQ(GURL("http://request2"), resolver->pending_requests()[1]->url()); | 885 EXPECT_EQ(GURL("http://request2"), resolver->pending_requests()[1]->url()); |
| 862 | 886 |
| 863 ProxyInfo info3; | 887 ProxyInfo info3; |
| 864 TestCompletionCallback callback3; | 888 TestCompletionCallback callback3; |
| 865 rv = service->ResolveProxy( | 889 rv = service->ResolveProxy( |
| 866 GURL("http://request3"), &info3, &callback3, NULL, NULL); | 890 GURL("http://request3"), &info3, &callback3, NULL, BoundNetLog()); |
| 867 EXPECT_EQ(ERR_IO_PENDING, rv); | 891 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 868 ASSERT_EQ(3u, resolver->pending_requests().size()); | 892 ASSERT_EQ(3u, resolver->pending_requests().size()); |
| 869 EXPECT_EQ(GURL("http://request3"), resolver->pending_requests()[2]->url()); | 893 EXPECT_EQ(GURL("http://request3"), resolver->pending_requests()[2]->url()); |
| 870 | 894 |
| 871 // Cancel the second request | 895 // Cancel the second request |
| 872 service->CancelPacRequest(request2); | 896 service->CancelPacRequest(request2); |
| 873 | 897 |
| 874 ASSERT_EQ(2u, resolver->pending_requests().size()); | 898 ASSERT_EQ(2u, resolver->pending_requests().size()); |
| 875 EXPECT_EQ(GURL("http://request1"), resolver->pending_requests()[0]->url()); | 899 EXPECT_EQ(GURL("http://request1"), resolver->pending_requests()[0]->url()); |
| 876 EXPECT_EQ(GURL("http://request3"), resolver->pending_requests()[1]->url()); | 900 EXPECT_EQ(GURL("http://request3"), resolver->pending_requests()[1]->url()); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 897 | 921 |
| 898 // Test the initial PAC download for resolver that expects bytes. | 922 // Test the initial PAC download for resolver that expects bytes. |
| 899 TEST(ProxyServiceTest, InitialPACScriptDownload) { | 923 TEST(ProxyServiceTest, InitialPACScriptDownload) { |
| 900 MockProxyConfigService* config_service = | 924 MockProxyConfigService* config_service = |
| 901 new MockProxyConfigService("http://foopy/proxy.pac"); | 925 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 902 | 926 |
| 903 MockAsyncProxyResolverExpectsBytes* resolver = | 927 MockAsyncProxyResolverExpectsBytes* resolver = |
| 904 new MockAsyncProxyResolverExpectsBytes; | 928 new MockAsyncProxyResolverExpectsBytes; |
| 905 | 929 |
| 906 scoped_refptr<ProxyService> service( | 930 scoped_refptr<ProxyService> service( |
| 907 new ProxyService(config_service, resolver, NULL, BoundNetLog())); | 931 new ProxyService(config_service, resolver, NULL, NULL)); |
| 908 | 932 |
| 909 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 933 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| 910 service->SetProxyScriptFetcher(fetcher); | 934 service->SetProxyScriptFetcher(fetcher); |
| 911 | 935 |
| 912 // Start 3 requests. | 936 // Start 3 requests. |
| 913 | 937 |
| 914 ProxyInfo info1; | 938 ProxyInfo info1; |
| 915 TestCompletionCallback callback1; | 939 TestCompletionCallback callback1; |
| 916 int rv = service->ResolveProxy( | 940 int rv = service->ResolveProxy( |
| 917 GURL("http://request1"), &info1, &callback1, NULL, NULL); | 941 GURL("http://request1"), &info1, &callback1, NULL, BoundNetLog()); |
| 918 EXPECT_EQ(ERR_IO_PENDING, rv); | 942 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 919 | 943 |
| 920 // The first request should have triggered download of PAC script. | 944 // The first request should have triggered download of PAC script. |
| 921 EXPECT_TRUE(fetcher->has_pending_request()); | 945 EXPECT_TRUE(fetcher->has_pending_request()); |
| 922 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); | 946 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
| 923 | 947 |
| 924 ProxyInfo info2; | 948 ProxyInfo info2; |
| 925 TestCompletionCallback callback2; | 949 TestCompletionCallback callback2; |
| 926 rv = service->ResolveProxy( | 950 rv = service->ResolveProxy( |
| 927 GURL("http://request2"), &info2, &callback2, NULL, NULL); | 951 GURL("http://request2"), &info2, &callback2, NULL, BoundNetLog()); |
| 928 EXPECT_EQ(ERR_IO_PENDING, rv); | 952 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 929 | 953 |
| 930 ProxyInfo info3; | 954 ProxyInfo info3; |
| 931 TestCompletionCallback callback3; | 955 TestCompletionCallback callback3; |
| 932 rv = service->ResolveProxy( | 956 rv = service->ResolveProxy( |
| 933 GURL("http://request3"), &info3, &callback3, NULL, NULL); | 957 GURL("http://request3"), &info3, &callback3, NULL, BoundNetLog()); |
| 934 EXPECT_EQ(ERR_IO_PENDING, rv); | 958 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 935 | 959 |
| 936 // Nothing has been sent to the resolver yet. | 960 // Nothing has been sent to the resolver yet. |
| 937 EXPECT_TRUE(resolver->pending_requests().empty()); | 961 EXPECT_TRUE(resolver->pending_requests().empty()); |
| 938 | 962 |
| 939 // At this point the ProxyService should be waiting for the | 963 // At this point the ProxyService should be waiting for the |
| 940 // ProxyScriptFetcher to invoke its completion callback, notifying it of | 964 // ProxyScriptFetcher to invoke its completion callback, notifying it of |
| 941 // PAC script download completion. | 965 // PAC script download completion. |
| 942 fetcher->NotifyFetchCompletion(OK, "pac-v1"); | 966 fetcher->NotifyFetchCompletion(OK, "pac-v1"); |
| 943 | 967 |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 976 | 1000 |
| 977 // Test changing the ProxyScriptFetcher while PAC download is in progress. | 1001 // Test changing the ProxyScriptFetcher while PAC download is in progress. |
| 978 TEST(ProxyServiceTest, ChangeScriptFetcherWhilePACDownloadInProgress) { | 1002 TEST(ProxyServiceTest, ChangeScriptFetcherWhilePACDownloadInProgress) { |
| 979 MockProxyConfigService* config_service = | 1003 MockProxyConfigService* config_service = |
| 980 new MockProxyConfigService("http://foopy/proxy.pac"); | 1004 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 981 | 1005 |
| 982 MockAsyncProxyResolverExpectsBytes* resolver = | 1006 MockAsyncProxyResolverExpectsBytes* resolver = |
| 983 new MockAsyncProxyResolverExpectsBytes; | 1007 new MockAsyncProxyResolverExpectsBytes; |
| 984 | 1008 |
| 985 scoped_refptr<ProxyService> service( | 1009 scoped_refptr<ProxyService> service( |
| 986 new ProxyService(config_service, resolver, NULL, BoundNetLog())); | 1010 new ProxyService(config_service, resolver, NULL, NULL)); |
| 987 | 1011 |
| 988 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 1012 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| 989 service->SetProxyScriptFetcher(fetcher); | 1013 service->SetProxyScriptFetcher(fetcher); |
| 990 | 1014 |
| 991 // Start 2 requests. | 1015 // Start 2 requests. |
| 992 | 1016 |
| 993 ProxyInfo info1; | 1017 ProxyInfo info1; |
| 994 TestCompletionCallback callback1; | 1018 TestCompletionCallback callback1; |
| 995 int rv = service->ResolveProxy( | 1019 int rv = service->ResolveProxy( |
| 996 GURL("http://request1"), &info1, &callback1, NULL, NULL); | 1020 GURL("http://request1"), &info1, &callback1, NULL, BoundNetLog()); |
| 997 EXPECT_EQ(ERR_IO_PENDING, rv); | 1021 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 998 | 1022 |
| 999 // The first request should have triggered download of PAC script. | 1023 // The first request should have triggered download of PAC script. |
| 1000 EXPECT_TRUE(fetcher->has_pending_request()); | 1024 EXPECT_TRUE(fetcher->has_pending_request()); |
| 1001 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); | 1025 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
| 1002 | 1026 |
| 1003 ProxyInfo info2; | 1027 ProxyInfo info2; |
| 1004 TestCompletionCallback callback2; | 1028 TestCompletionCallback callback2; |
| 1005 rv = service->ResolveProxy( | 1029 rv = service->ResolveProxy( |
| 1006 GURL("http://request2"), &info2, &callback2, NULL, NULL); | 1030 GURL("http://request2"), &info2, &callback2, NULL, BoundNetLog()); |
| 1007 EXPECT_EQ(ERR_IO_PENDING, rv); | 1031 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1008 | 1032 |
| 1009 // At this point the ProxyService should be waiting for the | 1033 // At this point the ProxyService should be waiting for the |
| 1010 // ProxyScriptFetcher to invoke its completion callback, notifying it of | 1034 // ProxyScriptFetcher to invoke its completion callback, notifying it of |
| 1011 // PAC script download completion. | 1035 // PAC script download completion. |
| 1012 | 1036 |
| 1013 // We now change out the ProxyService's script fetcher. We should restart | 1037 // We now change out the ProxyService's script fetcher. We should restart |
| 1014 // the initialization with the new fetcher. | 1038 // the initialization with the new fetcher. |
| 1015 | 1039 |
| 1016 fetcher = new MockProxyScriptFetcher; | 1040 fetcher = new MockProxyScriptFetcher; |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1033 | 1057 |
| 1034 // Test cancellation of a request, while the PAC script is being fetched. | 1058 // Test cancellation of a request, while the PAC script is being fetched. |
| 1035 TEST(ProxyServiceTest, CancelWhilePACFetching) { | 1059 TEST(ProxyServiceTest, CancelWhilePACFetching) { |
| 1036 MockProxyConfigService* config_service = | 1060 MockProxyConfigService* config_service = |
| 1037 new MockProxyConfigService("http://foopy/proxy.pac"); | 1061 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 1038 | 1062 |
| 1039 MockAsyncProxyResolverExpectsBytes* resolver = | 1063 MockAsyncProxyResolverExpectsBytes* resolver = |
| 1040 new MockAsyncProxyResolverExpectsBytes; | 1064 new MockAsyncProxyResolverExpectsBytes; |
| 1041 | 1065 |
| 1042 scoped_refptr<ProxyService> service( | 1066 scoped_refptr<ProxyService> service( |
| 1043 new ProxyService(config_service, resolver, NULL, BoundNetLog())); | 1067 new ProxyService(config_service, resolver, NULL, NULL)); |
| 1044 | 1068 |
| 1045 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 1069 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| 1046 service->SetProxyScriptFetcher(fetcher); | 1070 service->SetProxyScriptFetcher(fetcher); |
| 1047 | 1071 |
| 1048 // Start 3 requests. | 1072 // Start 3 requests. |
| 1049 ProxyInfo info1; | 1073 ProxyInfo info1; |
| 1050 TestCompletionCallback callback1; | 1074 TestCompletionCallback callback1; |
| 1051 ProxyService::PacRequest* request1; | 1075 ProxyService::PacRequest* request1; |
| 1052 CapturingBoundNetLog log1(CapturingNetLog::kUnbounded); | 1076 CapturingBoundNetLog log1(CapturingNetLog::kUnbounded); |
| 1053 int rv = service->ResolveProxy( | 1077 int rv = service->ResolveProxy( |
| 1054 GURL("http://request1"), &info1, &callback1, &request1, log1.bound()); | 1078 GURL("http://request1"), &info1, &callback1, &request1, log1.bound()); |
| 1055 EXPECT_EQ(ERR_IO_PENDING, rv); | 1079 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1056 | 1080 |
| 1057 // The first request should have triggered download of PAC script. | 1081 // The first request should have triggered download of PAC script. |
| 1058 EXPECT_TRUE(fetcher->has_pending_request()); | 1082 EXPECT_TRUE(fetcher->has_pending_request()); |
| 1059 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); | 1083 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
| 1060 | 1084 |
| 1061 ProxyInfo info2; | 1085 ProxyInfo info2; |
| 1062 TestCompletionCallback callback2; | 1086 TestCompletionCallback callback2; |
| 1063 ProxyService::PacRequest* request2; | 1087 ProxyService::PacRequest* request2; |
| 1064 rv = service->ResolveProxy( | 1088 rv = service->ResolveProxy( |
| 1065 GURL("http://request2"), &info2, &callback2, &request2, NULL); | 1089 GURL("http://request2"), &info2, &callback2, &request2, BoundNetLog()); |
| 1066 EXPECT_EQ(ERR_IO_PENDING, rv); | 1090 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1067 | 1091 |
| 1068 ProxyInfo info3; | 1092 ProxyInfo info3; |
| 1069 TestCompletionCallback callback3; | 1093 TestCompletionCallback callback3; |
| 1070 rv = service->ResolveProxy( | 1094 rv = service->ResolveProxy( |
| 1071 GURL("http://request3"), &info3, &callback3, NULL, NULL); | 1095 GURL("http://request3"), &info3, &callback3, NULL, BoundNetLog()); |
| 1072 EXPECT_EQ(ERR_IO_PENDING, rv); | 1096 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1073 | 1097 |
| 1074 // Nothing has been sent to the resolver yet. | 1098 // Nothing has been sent to the resolver yet. |
| 1075 EXPECT_TRUE(resolver->pending_requests().empty()); | 1099 EXPECT_TRUE(resolver->pending_requests().empty()); |
| 1076 | 1100 |
| 1077 // Cancel the first 2 requests. | 1101 // Cancel the first 2 requests. |
| 1078 service->CancelPacRequest(request1); | 1102 service->CancelPacRequest(request1); |
| 1079 service->CancelPacRequest(request2); | 1103 service->CancelPacRequest(request2); |
| 1080 | 1104 |
| 1081 // At this point the ProxyService should be waiting for the | 1105 // At this point the ProxyService should be waiting for the |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1121 TEST(ProxyServiceTest, FallbackFromAutodetectToCustomPac) { | 1145 TEST(ProxyServiceTest, FallbackFromAutodetectToCustomPac) { |
| 1122 ProxyConfig config; | 1146 ProxyConfig config; |
| 1123 config.set_auto_detect(true); | 1147 config.set_auto_detect(true); |
| 1124 config.set_pac_url(GURL("http://foopy/proxy.pac")); | 1148 config.set_pac_url(GURL("http://foopy/proxy.pac")); |
| 1125 config.proxy_rules().ParseFromString("http=foopy:80"); // Won't be used. | 1149 config.proxy_rules().ParseFromString("http=foopy:80"); // Won't be used. |
| 1126 | 1150 |
| 1127 MockProxyConfigService* config_service = new MockProxyConfigService(config); | 1151 MockProxyConfigService* config_service = new MockProxyConfigService(config); |
| 1128 MockAsyncProxyResolverExpectsBytes* resolver = | 1152 MockAsyncProxyResolverExpectsBytes* resolver = |
| 1129 new MockAsyncProxyResolverExpectsBytes; | 1153 new MockAsyncProxyResolverExpectsBytes; |
| 1130 scoped_refptr<ProxyService> service( | 1154 scoped_refptr<ProxyService> service( |
| 1131 new ProxyService(config_service, resolver, NULL, BoundNetLog())); | 1155 new ProxyService(config_service, resolver, NULL, NULL)); |
| 1132 | 1156 |
| 1133 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 1157 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| 1134 service->SetProxyScriptFetcher(fetcher); | 1158 service->SetProxyScriptFetcher(fetcher); |
| 1135 | 1159 |
| 1136 // Start 2 requests. | 1160 // Start 2 requests. |
| 1137 | 1161 |
| 1138 ProxyInfo info1; | 1162 ProxyInfo info1; |
| 1139 TestCompletionCallback callback1; | 1163 TestCompletionCallback callback1; |
| 1140 int rv = service->ResolveProxy( | 1164 int rv = service->ResolveProxy( |
| 1141 GURL("http://request1"), &info1, &callback1, NULL, NULL); | 1165 GURL("http://request1"), &info1, &callback1, NULL, BoundNetLog()); |
| 1142 EXPECT_EQ(ERR_IO_PENDING, rv); | 1166 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1143 | 1167 |
| 1144 ProxyInfo info2; | 1168 ProxyInfo info2; |
| 1145 TestCompletionCallback callback2; | 1169 TestCompletionCallback callback2; |
| 1146 ProxyService::PacRequest* request2; | 1170 ProxyService::PacRequest* request2; |
| 1147 rv = service->ResolveProxy( | 1171 rv = service->ResolveProxy( |
| 1148 GURL("http://request2"), &info2, &callback2, &request2, NULL); | 1172 GURL("http://request2"), &info2, &callback2, &request2, BoundNetLog()); |
| 1149 EXPECT_EQ(ERR_IO_PENDING, rv); | 1173 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1150 | 1174 |
| 1151 // Check that nothing has been sent to the proxy resolver yet. | 1175 // Check that nothing has been sent to the proxy resolver yet. |
| 1152 ASSERT_EQ(0u, resolver->pending_requests().size()); | 1176 ASSERT_EQ(0u, resolver->pending_requests().size()); |
| 1153 | 1177 |
| 1154 // It should be trying to auto-detect first -- FAIL the autodetect during | 1178 // It should be trying to auto-detect first -- FAIL the autodetect during |
| 1155 // the script download. | 1179 // the script download. |
| 1156 EXPECT_TRUE(fetcher->has_pending_request()); | 1180 EXPECT_TRUE(fetcher->has_pending_request()); |
| 1157 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url()); | 1181 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url()); |
| 1158 fetcher->NotifyFetchCompletion(ERR_FAILED, ""); | 1182 fetcher->NotifyFetchCompletion(ERR_FAILED, ""); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1192 TEST(ProxyServiceTest, FallbackFromAutodetectToCustomPac2) { | 1216 TEST(ProxyServiceTest, FallbackFromAutodetectToCustomPac2) { |
| 1193 ProxyConfig config; | 1217 ProxyConfig config; |
| 1194 config.set_auto_detect(true); | 1218 config.set_auto_detect(true); |
| 1195 config.set_pac_url(GURL("http://foopy/proxy.pac")); | 1219 config.set_pac_url(GURL("http://foopy/proxy.pac")); |
| 1196 config.proxy_rules().ParseFromString("http=foopy:80"); // Won't be used. | 1220 config.proxy_rules().ParseFromString("http=foopy:80"); // Won't be used. |
| 1197 | 1221 |
| 1198 MockProxyConfigService* config_service = new MockProxyConfigService(config); | 1222 MockProxyConfigService* config_service = new MockProxyConfigService(config); |
| 1199 MockAsyncProxyResolverExpectsBytes* resolver = | 1223 MockAsyncProxyResolverExpectsBytes* resolver = |
| 1200 new MockAsyncProxyResolverExpectsBytes; | 1224 new MockAsyncProxyResolverExpectsBytes; |
| 1201 scoped_refptr<ProxyService> service( | 1225 scoped_refptr<ProxyService> service( |
| 1202 new ProxyService(config_service, resolver, NULL, BoundNetLog())); | 1226 new ProxyService(config_service, resolver, NULL, NULL)); |
| 1203 | 1227 |
| 1204 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 1228 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| 1205 service->SetProxyScriptFetcher(fetcher); | 1229 service->SetProxyScriptFetcher(fetcher); |
| 1206 | 1230 |
| 1207 // Start 2 requests. | 1231 // Start 2 requests. |
| 1208 | 1232 |
| 1209 ProxyInfo info1; | 1233 ProxyInfo info1; |
| 1210 TestCompletionCallback callback1; | 1234 TestCompletionCallback callback1; |
| 1211 int rv = service->ResolveProxy( | 1235 int rv = service->ResolveProxy( |
| 1212 GURL("http://request1"), &info1, &callback1, NULL, NULL); | 1236 GURL("http://request1"), &info1, &callback1, NULL, BoundNetLog()); |
| 1213 EXPECT_EQ(ERR_IO_PENDING, rv); | 1237 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1214 | 1238 |
| 1215 ProxyInfo info2; | 1239 ProxyInfo info2; |
| 1216 TestCompletionCallback callback2; | 1240 TestCompletionCallback callback2; |
| 1217 ProxyService::PacRequest* request2; | 1241 ProxyService::PacRequest* request2; |
| 1218 rv = service->ResolveProxy( | 1242 rv = service->ResolveProxy( |
| 1219 GURL("http://request2"), &info2, &callback2, &request2, NULL); | 1243 GURL("http://request2"), &info2, &callback2, &request2, BoundNetLog()); |
| 1220 EXPECT_EQ(ERR_IO_PENDING, rv); | 1244 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1221 | 1245 |
| 1222 // Check that nothing has been sent to the proxy resolver yet. | 1246 // Check that nothing has been sent to the proxy resolver yet. |
| 1223 ASSERT_EQ(0u, resolver->pending_requests().size()); | 1247 ASSERT_EQ(0u, resolver->pending_requests().size()); |
| 1224 | 1248 |
| 1225 // It should be trying to auto-detect first -- succeed the download. | 1249 // It should be trying to auto-detect first -- succeed the download. |
| 1226 EXPECT_TRUE(fetcher->has_pending_request()); | 1250 EXPECT_TRUE(fetcher->has_pending_request()); |
| 1227 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url()); | 1251 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url()); |
| 1228 fetcher->NotifyFetchCompletion(OK, "invalid-script-contents"); | 1252 fetcher->NotifyFetchCompletion(OK, "invalid-script-contents"); |
| 1229 | 1253 |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1268 TEST(ProxyServiceTest, FallbackFromAutodetectToCustomToManual) { | 1292 TEST(ProxyServiceTest, FallbackFromAutodetectToCustomToManual) { |
| 1269 ProxyConfig config; | 1293 ProxyConfig config; |
| 1270 config.set_auto_detect(true); | 1294 config.set_auto_detect(true); |
| 1271 config.set_pac_url(GURL("http://foopy/proxy.pac")); | 1295 config.set_pac_url(GURL("http://foopy/proxy.pac")); |
| 1272 config.proxy_rules().ParseFromString("http=foopy:80"); | 1296 config.proxy_rules().ParseFromString("http=foopy:80"); |
| 1273 | 1297 |
| 1274 MockProxyConfigService* config_service = new MockProxyConfigService(config); | 1298 MockProxyConfigService* config_service = new MockProxyConfigService(config); |
| 1275 MockAsyncProxyResolverExpectsBytes* resolver = | 1299 MockAsyncProxyResolverExpectsBytes* resolver = |
| 1276 new MockAsyncProxyResolverExpectsBytes; | 1300 new MockAsyncProxyResolverExpectsBytes; |
| 1277 scoped_refptr<ProxyService> service( | 1301 scoped_refptr<ProxyService> service( |
| 1278 new ProxyService(config_service, resolver, NULL, BoundNetLog())); | 1302 new ProxyService(config_service, resolver, NULL, NULL)); |
| 1279 | 1303 |
| 1280 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 1304 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| 1281 service->SetProxyScriptFetcher(fetcher); | 1305 service->SetProxyScriptFetcher(fetcher); |
| 1282 | 1306 |
| 1283 // Start 2 requests. | 1307 // Start 2 requests. |
| 1284 | 1308 |
| 1285 ProxyInfo info1; | 1309 ProxyInfo info1; |
| 1286 TestCompletionCallback callback1; | 1310 TestCompletionCallback callback1; |
| 1287 int rv = service->ResolveProxy( | 1311 int rv = service->ResolveProxy( |
| 1288 GURL("http://request1"), &info1, &callback1, NULL, NULL); | 1312 GURL("http://request1"), &info1, &callback1, NULL, BoundNetLog()); |
| 1289 EXPECT_EQ(ERR_IO_PENDING, rv); | 1313 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1290 | 1314 |
| 1291 ProxyInfo info2; | 1315 ProxyInfo info2; |
| 1292 TestCompletionCallback callback2; | 1316 TestCompletionCallback callback2; |
| 1293 ProxyService::PacRequest* request2; | 1317 ProxyService::PacRequest* request2; |
| 1294 rv = service->ResolveProxy( | 1318 rv = service->ResolveProxy( |
| 1295 GURL("http://request2"), &info2, &callback2, &request2, NULL); | 1319 GURL("http://request2"), &info2, &callback2, &request2, BoundNetLog()); |
| 1296 EXPECT_EQ(ERR_IO_PENDING, rv); | 1320 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1297 | 1321 |
| 1298 // Check that nothing has been sent to the proxy resolver yet. | 1322 // Check that nothing has been sent to the proxy resolver yet. |
| 1299 ASSERT_EQ(0u, resolver->pending_requests().size()); | 1323 ASSERT_EQ(0u, resolver->pending_requests().size()); |
| 1300 | 1324 |
| 1301 // It should be trying to auto-detect first -- fail the download. | 1325 // It should be trying to auto-detect first -- fail the download. |
| 1302 EXPECT_TRUE(fetcher->has_pending_request()); | 1326 EXPECT_TRUE(fetcher->has_pending_request()); |
| 1303 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url()); | 1327 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url()); |
| 1304 fetcher->NotifyFetchCompletion(ERR_FAILED, ""); | 1328 fetcher->NotifyFetchCompletion(ERR_FAILED, ""); |
| 1305 | 1329 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 1326 ProxyConfig config; | 1350 ProxyConfig config; |
| 1327 config.set_auto_detect(true); | 1351 config.set_auto_detect(true); |
| 1328 config.set_pac_url(GURL("http://foopy/proxy.pac")); | 1352 config.set_pac_url(GURL("http://foopy/proxy.pac")); |
| 1329 config.proxy_rules().ParseFromString("http=foopy:80"); // Not used. | 1353 config.proxy_rules().ParseFromString("http=foopy:80"); // Not used. |
| 1330 config.proxy_rules().bypass_rules.ParseFromString("www.google.com"); | 1354 config.proxy_rules().bypass_rules.ParseFromString("www.google.com"); |
| 1331 | 1355 |
| 1332 MockProxyConfigService* config_service = new MockProxyConfigService(config); | 1356 MockProxyConfigService* config_service = new MockProxyConfigService(config); |
| 1333 MockAsyncProxyResolverExpectsBytes* resolver = | 1357 MockAsyncProxyResolverExpectsBytes* resolver = |
| 1334 new MockAsyncProxyResolverExpectsBytes; | 1358 new MockAsyncProxyResolverExpectsBytes; |
| 1335 scoped_refptr<ProxyService> service( | 1359 scoped_refptr<ProxyService> service( |
| 1336 new ProxyService(config_service, resolver, NULL, BoundNetLog())); | 1360 new ProxyService(config_service, resolver, NULL, NULL)); |
| 1337 | 1361 |
| 1338 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 1362 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| 1339 service->SetProxyScriptFetcher(fetcher); | 1363 service->SetProxyScriptFetcher(fetcher); |
| 1340 | 1364 |
| 1341 // Start 1 requests. | 1365 // Start 1 requests. |
| 1342 | 1366 |
| 1343 ProxyInfo info1; | 1367 ProxyInfo info1; |
| 1344 TestCompletionCallback callback1; | 1368 TestCompletionCallback callback1; |
| 1345 int rv = service->ResolveProxy( | 1369 int rv = service->ResolveProxy( |
| 1346 GURL("http://www.google.com"), &info1, &callback1, NULL, NULL); | 1370 GURL("http://www.google.com"), &info1, &callback1, NULL, BoundNetLog()); |
| 1347 EXPECT_EQ(ERR_IO_PENDING, rv); | 1371 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1348 | 1372 |
| 1349 // Check that nothing has been sent to the proxy resolver yet. | 1373 // Check that nothing has been sent to the proxy resolver yet. |
| 1350 ASSERT_EQ(0u, resolver->pending_requests().size()); | 1374 ASSERT_EQ(0u, resolver->pending_requests().size()); |
| 1351 | 1375 |
| 1352 // It should be trying to auto-detect first -- succeed the download. | 1376 // It should be trying to auto-detect first -- succeed the download. |
| 1353 EXPECT_TRUE(fetcher->has_pending_request()); | 1377 EXPECT_TRUE(fetcher->has_pending_request()); |
| 1354 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url()); | 1378 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url()); |
| 1355 fetcher->NotifyFetchCompletion(OK, "auto-detect"); | 1379 fetcher->NotifyFetchCompletion(OK, "auto-detect"); |
| 1356 | 1380 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1367 resolver->pending_requests()[0]->CompleteNow(OK); | 1391 resolver->pending_requests()[0]->CompleteNow(OK); |
| 1368 | 1392 |
| 1369 // Verify that request ran as expected. | 1393 // Verify that request ran as expected. |
| 1370 EXPECT_EQ(OK, callback1.WaitForResult()); | 1394 EXPECT_EQ(OK, callback1.WaitForResult()); |
| 1371 EXPECT_EQ("request1:80", info1.proxy_server().ToURI()); | 1395 EXPECT_EQ("request1:80", info1.proxy_server().ToURI()); |
| 1372 | 1396 |
| 1373 // Start another request, it should pickup the bypass item. | 1397 // Start another request, it should pickup the bypass item. |
| 1374 ProxyInfo info2; | 1398 ProxyInfo info2; |
| 1375 TestCompletionCallback callback2; | 1399 TestCompletionCallback callback2; |
| 1376 rv = service->ResolveProxy( | 1400 rv = service->ResolveProxy( |
| 1377 GURL("http://www.google.com"), &info2, &callback2, NULL, NULL); | 1401 GURL("http://www.google.com"), &info2, &callback2, NULL, BoundNetLog()); |
| 1378 EXPECT_EQ(ERR_IO_PENDING, rv); | 1402 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1379 | 1403 |
| 1380 ASSERT_EQ(1u, resolver->pending_requests().size()); | 1404 ASSERT_EQ(1u, resolver->pending_requests().size()); |
| 1381 EXPECT_EQ(GURL("http://www.google.com"), | 1405 EXPECT_EQ(GURL("http://www.google.com"), |
| 1382 resolver->pending_requests()[0]->url()); | 1406 resolver->pending_requests()[0]->url()); |
| 1383 | 1407 |
| 1384 // Complete the pending request. | 1408 // Complete the pending request. |
| 1385 resolver->pending_requests()[0]->results()->UseNamedProxy("request2:80"); | 1409 resolver->pending_requests()[0]->results()->UseNamedProxy("request2:80"); |
| 1386 resolver->pending_requests()[0]->CompleteNow(OK); | 1410 resolver->pending_requests()[0]->CompleteNow(OK); |
| 1387 | 1411 |
| 1388 EXPECT_EQ(OK, callback2.WaitForResult()); | 1412 EXPECT_EQ(OK, callback2.WaitForResult()); |
| 1389 EXPECT_EQ("request2:80", info2.proxy_server().ToURI()); | 1413 EXPECT_EQ("request2:80", info2.proxy_server().ToURI()); |
| 1390 } | 1414 } |
| 1391 | 1415 |
| 1392 // Delete the ProxyService while InitProxyResolver has an outstanding | 1416 // Delete the ProxyService while InitProxyResolver has an outstanding |
| 1393 // request to the script fetcher. When run under valgrind, should not | 1417 // request to the script fetcher. When run under valgrind, should not |
| 1394 // have any memory errors (used to be that the ProxyScriptFetcher was | 1418 // have any memory errors (used to be that the ProxyScriptFetcher was |
| 1395 // being deleted prior to the InitProxyResolver). | 1419 // being deleted prior to the InitProxyResolver). |
| 1396 TEST(ProxyServiceTest, DeleteWhileInitProxyResolverHasOutstandingFetch) { | 1420 TEST(ProxyServiceTest, DeleteWhileInitProxyResolverHasOutstandingFetch) { |
| 1397 ProxyConfig config; | 1421 ProxyConfig config; |
| 1398 config.set_pac_url(GURL("http://foopy/proxy.pac")); | 1422 config.set_pac_url(GURL("http://foopy/proxy.pac")); |
| 1399 | 1423 |
| 1400 MockProxyConfigService* config_service = new MockProxyConfigService(config); | 1424 MockProxyConfigService* config_service = new MockProxyConfigService(config); |
| 1401 MockAsyncProxyResolverExpectsBytes* resolver = | 1425 MockAsyncProxyResolverExpectsBytes* resolver = |
| 1402 new MockAsyncProxyResolverExpectsBytes; | 1426 new MockAsyncProxyResolverExpectsBytes; |
| 1403 scoped_refptr<ProxyService> service( | 1427 scoped_refptr<ProxyService> service( |
| 1404 new ProxyService(config_service, resolver, NULL, BoundNetLog())); | 1428 new ProxyService(config_service, resolver, NULL, NULL)); |
| 1405 | 1429 |
| 1406 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 1430 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| 1407 service->SetProxyScriptFetcher(fetcher); | 1431 service->SetProxyScriptFetcher(fetcher); |
| 1408 | 1432 |
| 1409 // Start 1 request. | 1433 // Start 1 request. |
| 1410 | 1434 |
| 1411 ProxyInfo info1; | 1435 ProxyInfo info1; |
| 1412 TestCompletionCallback callback1; | 1436 TestCompletionCallback callback1; |
| 1413 int rv = service->ResolveProxy( | 1437 int rv = service->ResolveProxy( |
| 1414 GURL("http://www.google.com"), &info1, &callback1, NULL, NULL); | 1438 GURL("http://www.google.com"), &info1, &callback1, NULL, BoundNetLog()); |
| 1415 EXPECT_EQ(ERR_IO_PENDING, rv); | 1439 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1416 | 1440 |
| 1417 // Check that nothing has been sent to the proxy resolver yet. | 1441 // Check that nothing has been sent to the proxy resolver yet. |
| 1418 ASSERT_EQ(0u, resolver->pending_requests().size()); | 1442 ASSERT_EQ(0u, resolver->pending_requests().size()); |
| 1419 | 1443 |
| 1420 // InitProxyResolver should have issued a request to the ProxyScriptFetcher | 1444 // InitProxyResolver should have issued a request to the ProxyScriptFetcher |
| 1421 // and be waiting on that to complete. | 1445 // and be waiting on that to complete. |
| 1422 EXPECT_TRUE(fetcher->has_pending_request()); | 1446 EXPECT_TRUE(fetcher->has_pending_request()); |
| 1423 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); | 1447 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
| 1424 | 1448 |
| 1425 // Delete the ProxyService | 1449 // Delete the ProxyService |
| 1426 service = NULL; | 1450 service = NULL; |
| 1427 } | 1451 } |
| 1428 | 1452 |
| 1429 // Delete the ProxyService while InitProxyResolver has an outstanding | 1453 // Delete the ProxyService while InitProxyResolver has an outstanding |
| 1430 // request to the proxy resolver. When run under valgrind, should not | 1454 // request to the proxy resolver. When run under valgrind, should not |
| 1431 // have any memory errors (used to be that the ProxyResolver was | 1455 // have any memory errors (used to be that the ProxyResolver was |
| 1432 // being deleted prior to the InitProxyResolver). | 1456 // being deleted prior to the InitProxyResolver). |
| 1433 TEST(ProxyServiceTest, DeleteWhileInitProxyResolverHasOutstandingSet) { | 1457 TEST(ProxyServiceTest, DeleteWhileInitProxyResolverHasOutstandingSet) { |
| 1434 MockProxyConfigService* config_service = | 1458 MockProxyConfigService* config_service = |
| 1435 new MockProxyConfigService("http://foopy/proxy.pac"); | 1459 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 1436 | 1460 |
| 1437 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; | 1461 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; |
| 1438 | 1462 |
| 1439 scoped_refptr<ProxyService> service( | 1463 scoped_refptr<ProxyService> service( |
| 1440 new ProxyService(config_service, resolver, NULL, BoundNetLog())); | 1464 new ProxyService(config_service, resolver, NULL, NULL)); |
| 1441 | 1465 |
| 1442 GURL url("http://www.google.com/"); | 1466 GURL url("http://www.google.com/"); |
| 1443 | 1467 |
| 1444 ProxyInfo info; | 1468 ProxyInfo info; |
| 1445 TestCompletionCallback callback; | 1469 TestCompletionCallback callback; |
| 1446 int rv = service->ResolveProxy(url, &info, &callback, NULL, NULL); | 1470 int rv = service->ResolveProxy(url, &info, &callback, NULL, BoundNetLog()); |
| 1447 EXPECT_EQ(ERR_IO_PENDING, rv); | 1471 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1448 | 1472 |
| 1449 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 1473 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| 1450 resolver->pending_set_pac_script_request()->pac_url()); | 1474 resolver->pending_set_pac_script_request()->pac_url()); |
| 1451 | 1475 |
| 1452 // Delete the ProxyService. | 1476 // Delete the ProxyService. |
| 1453 service = NULL; | 1477 service = NULL; |
| 1454 } | 1478 } |
| 1455 | 1479 |
| 1456 TEST(ProxyServiceTest, ResetProxyConfigService) { | 1480 TEST(ProxyServiceTest, ResetProxyConfigService) { |
| 1457 ProxyConfig config1; | 1481 ProxyConfig config1; |
| 1458 config1.proxy_rules().ParseFromString("foopy1:8080"); | 1482 config1.proxy_rules().ParseFromString("foopy1:8080"); |
| 1459 config1.set_auto_detect(false); | 1483 config1.set_auto_detect(false); |
| 1460 scoped_refptr<ProxyService> service(new ProxyService( | 1484 scoped_refptr<ProxyService> service(new ProxyService( |
| 1461 new MockProxyConfigService(config1), | 1485 new MockProxyConfigService(config1), |
| 1462 new MockAsyncProxyResolverExpectsBytes, | 1486 new MockAsyncProxyResolverExpectsBytes, |
| 1463 NULL, BoundNetLog())); | 1487 NULL, NULL)); |
| 1464 | 1488 |
| 1465 ProxyInfo info; | 1489 ProxyInfo info; |
| 1466 TestCompletionCallback callback1; | 1490 TestCompletionCallback callback1; |
| 1467 int rv = service->ResolveProxy( | 1491 int rv = service->ResolveProxy( |
| 1468 GURL("http://request1"), &info, &callback1, NULL, NULL); | 1492 GURL("http://request1"), &info, &callback1, NULL, BoundNetLog()); |
| 1469 EXPECT_EQ(OK, rv); | 1493 EXPECT_EQ(OK, rv); |
| 1470 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 1494 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
| 1471 | 1495 |
| 1472 ProxyConfig config2; | 1496 ProxyConfig config2; |
| 1473 config2.proxy_rules().ParseFromString("foopy2:8080"); | 1497 config2.proxy_rules().ParseFromString("foopy2:8080"); |
| 1474 config2.set_auto_detect(false); | 1498 config2.set_auto_detect(false); |
| 1475 service->ResetConfigService(new MockProxyConfigService(config2)); | 1499 service->ResetConfigService(new MockProxyConfigService(config2)); |
| 1476 TestCompletionCallback callback2; | 1500 TestCompletionCallback callback2; |
| 1477 rv = service->ResolveProxy( | 1501 rv = service->ResolveProxy( |
| 1478 GURL("http://request2"), &info, &callback2, NULL, NULL); | 1502 GURL("http://request2"), &info, &callback2, NULL, BoundNetLog()); |
| 1479 EXPECT_EQ(OK, rv); | 1503 EXPECT_EQ(OK, rv); |
| 1480 EXPECT_EQ("foopy2:8080", info.proxy_server().ToURI()); | 1504 EXPECT_EQ("foopy2:8080", info.proxy_server().ToURI()); |
| 1481 } | 1505 } |
| 1482 | 1506 |
| 1483 // Check that after we have done the auto-detect test, and the configuration | 1507 // Check that after we have done the auto-detect test, and the configuration |
| 1484 // is updated (with no change), we don't re-try the autodetect test. | 1508 // is updated (with no change), we don't re-try the autodetect test. |
| 1485 // Regression test for http://crbug.com/18526 -- the configuration was being | 1509 // Regression test for http://crbug.com/18526 -- the configuration was being |
| 1486 // mutated to cancel out the automatic settings, which meant UpdateConfig() | 1510 // mutated to cancel out the automatic settings, which meant UpdateConfig() |
| 1487 // thought it had received a new configuration. | 1511 // thought it had received a new configuration. |
| 1488 TEST(ProxyServiceTest, UpdateConfigAfterFailedAutodetect) { | 1512 TEST(ProxyServiceTest, UpdateConfigAfterFailedAutodetect) { |
| 1489 ProxyConfig config; | 1513 ProxyConfig config; |
| 1490 config.set_auto_detect(true); | 1514 config.set_auto_detect(true); |
| 1491 | 1515 |
| 1492 MockProxyConfigService* config_service = new MockProxyConfigService(config); | 1516 MockProxyConfigService* config_service = new MockProxyConfigService(config); |
| 1493 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; | 1517 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; |
| 1494 scoped_refptr<ProxyService> service( | 1518 scoped_refptr<ProxyService> service( |
| 1495 new ProxyService(config_service, resolver, NULL, BoundNetLog())); | 1519 new ProxyService(config_service, resolver, NULL, NULL)); |
| 1496 | 1520 |
| 1497 // Start 1 requests. | 1521 // Start 1 requests. |
| 1498 | 1522 |
| 1499 ProxyInfo info1; | 1523 ProxyInfo info1; |
| 1500 TestCompletionCallback callback1; | 1524 TestCompletionCallback callback1; |
| 1501 int rv = service->ResolveProxy( | 1525 int rv = service->ResolveProxy( |
| 1502 GURL("http://www.google.com"), &info1, &callback1, NULL, NULL); | 1526 GURL("http://www.google.com"), &info1, &callback1, NULL, BoundNetLog()); |
| 1503 EXPECT_EQ(ERR_IO_PENDING, rv); | 1527 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1504 | 1528 |
| 1505 // Check that nothing has been sent to the proxy resolver yet. | 1529 // Check that nothing has been sent to the proxy resolver yet. |
| 1506 ASSERT_EQ(0u, resolver->pending_requests().size()); | 1530 ASSERT_EQ(0u, resolver->pending_requests().size()); |
| 1507 | 1531 |
| 1508 // Fail the setting of autodetect script. | 1532 // Fail the setting of autodetect script. |
| 1509 EXPECT_EQ(GURL(), resolver->pending_set_pac_script_request()->pac_url()); | 1533 EXPECT_EQ(GURL(), resolver->pending_set_pac_script_request()->pac_url()); |
| 1510 resolver->pending_set_pac_script_request()->CompleteNow(ERR_FAILED); | 1534 resolver->pending_set_pac_script_request()->CompleteNow(ERR_FAILED); |
| 1511 | 1535 |
| 1512 // Verify that request ran as expected -- should have fallen back to direct. | 1536 // Verify that request ran as expected -- should have fallen back to direct. |
| 1513 EXPECT_EQ(OK, callback1.WaitForResult()); | 1537 EXPECT_EQ(OK, callback1.WaitForResult()); |
| 1514 EXPECT_TRUE(info1.is_direct()); | 1538 EXPECT_TRUE(info1.is_direct()); |
| 1515 | 1539 |
| 1516 // Force the ProxyService to pull down a new proxy configuration. | 1540 // Force the ProxyService to pull down a new proxy configuration. |
| 1517 // (Even though the configuration isn't old/bad). | 1541 // (Even though the configuration isn't old/bad). |
| 1518 service->UpdateConfig(NULL); | 1542 service->UpdateConfig(BoundNetLog()); |
| 1519 | 1543 |
| 1520 // Start another request -- the effective configuration has not | 1544 // Start another request -- the effective configuration has not |
| 1521 // changed, so we shouldn't re-run the autodetect step. | 1545 // changed, so we shouldn't re-run the autodetect step. |
| 1522 // Rather, it should complete synchronously as direct-connect. | 1546 // Rather, it should complete synchronously as direct-connect. |
| 1523 ProxyInfo info2; | 1547 ProxyInfo info2; |
| 1524 TestCompletionCallback callback2; | 1548 TestCompletionCallback callback2; |
| 1525 rv = service->ResolveProxy( | 1549 rv = service->ResolveProxy( |
| 1526 GURL("http://www.google.com"), &info2, &callback2, NULL, NULL); | 1550 GURL("http://www.google.com"), &info2, &callback2, NULL, BoundNetLog()); |
| 1527 EXPECT_EQ(OK, rv); | 1551 EXPECT_EQ(OK, rv); |
| 1528 | 1552 |
| 1529 EXPECT_TRUE(info2.is_direct()); | 1553 EXPECT_TRUE(info2.is_direct()); |
| 1530 } | 1554 } |
| 1531 | 1555 |
| 1532 // Test that when going from a configuration that required PAC to one | 1556 // Test that when going from a configuration that required PAC to one |
| 1533 // that does NOT, we unset the variable |should_use_proxy_resolver_|. | 1557 // that does NOT, we unset the variable |should_use_proxy_resolver_|. |
| 1534 TEST(ProxyServiceTest, UpdateConfigFromPACToDirect) { | 1558 TEST(ProxyServiceTest, UpdateConfigFromPACToDirect) { |
| 1535 ProxyConfig config; | 1559 ProxyConfig config; |
| 1536 config.set_auto_detect(true); | 1560 config.set_auto_detect(true); |
| 1537 | 1561 |
| 1538 MockProxyConfigService* config_service = new MockProxyConfigService(config); | 1562 MockProxyConfigService* config_service = new MockProxyConfigService(config); |
| 1539 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; | 1563 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; |
| 1540 scoped_refptr<ProxyService> service( | 1564 scoped_refptr<ProxyService> service( |
| 1541 new ProxyService(config_service, resolver, NULL, BoundNetLog())); | 1565 new ProxyService(config_service, resolver, NULL, NULL)); |
| 1542 | 1566 |
| 1543 // Start 1 request. | 1567 // Start 1 request. |
| 1544 | 1568 |
| 1545 ProxyInfo info1; | 1569 ProxyInfo info1; |
| 1546 TestCompletionCallback callback1; | 1570 TestCompletionCallback callback1; |
| 1547 int rv = service->ResolveProxy( | 1571 int rv = service->ResolveProxy( |
| 1548 GURL("http://www.google.com"), &info1, &callback1, NULL, NULL); | 1572 GURL("http://www.google.com"), &info1, &callback1, NULL, BoundNetLog()); |
| 1549 EXPECT_EQ(ERR_IO_PENDING, rv); | 1573 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1550 | 1574 |
| 1551 // Check that nothing has been sent to the proxy resolver yet. | 1575 // Check that nothing has been sent to the proxy resolver yet. |
| 1552 ASSERT_EQ(0u, resolver->pending_requests().size()); | 1576 ASSERT_EQ(0u, resolver->pending_requests().size()); |
| 1553 | 1577 |
| 1554 // Successfully set the autodetect script. | 1578 // Successfully set the autodetect script. |
| 1555 EXPECT_EQ(GURL(), resolver->pending_set_pac_script_request()->pac_url()); | 1579 EXPECT_EQ(GURL(), resolver->pending_set_pac_script_request()->pac_url()); |
| 1556 resolver->pending_set_pac_script_request()->CompleteNow(OK); | 1580 resolver->pending_set_pac_script_request()->CompleteNow(OK); |
| 1557 | 1581 |
| 1558 // Complete the pending request. | 1582 // Complete the pending request. |
| 1559 ASSERT_EQ(1u, resolver->pending_requests().size()); | 1583 ASSERT_EQ(1u, resolver->pending_requests().size()); |
| 1560 resolver->pending_requests()[0]->results()->UseNamedProxy("request1:80"); | 1584 resolver->pending_requests()[0]->results()->UseNamedProxy("request1:80"); |
| 1561 resolver->pending_requests()[0]->CompleteNow(OK); | 1585 resolver->pending_requests()[0]->CompleteNow(OK); |
| 1562 | 1586 |
| 1563 // Verify that request ran as expected. | 1587 // Verify that request ran as expected. |
| 1564 EXPECT_EQ(OK, callback1.WaitForResult()); | 1588 EXPECT_EQ(OK, callback1.WaitForResult()); |
| 1565 EXPECT_EQ("request1:80", info1.proxy_server().ToURI()); | 1589 EXPECT_EQ("request1:80", info1.proxy_server().ToURI()); |
| 1566 | 1590 |
| 1567 // Force the ProxyService to pull down a new proxy configuration. | 1591 // Force the ProxyService to pull down a new proxy configuration. |
| 1568 // (Even though the configuration isn't old/bad). | 1592 // (Even though the configuration isn't old/bad). |
| 1569 // | 1593 // |
| 1570 // This new configuration no longer has auto_detect set, so | 1594 // This new configuration no longer has auto_detect set, so |
| 1571 // requests should complete synchronously now as direct-connect. | 1595 // requests should complete synchronously now as direct-connect. |
| 1572 config.set_auto_detect(false); | 1596 config.set_auto_detect(false); |
| 1573 config_service->config = config; | 1597 config_service->config = config; |
| 1574 service->UpdateConfig(NULL); | 1598 service->UpdateConfig(BoundNetLog()); |
| 1575 | 1599 |
| 1576 // Start another request -- the effective configuration has changed. | 1600 // Start another request -- the effective configuration has changed. |
| 1577 ProxyInfo info2; | 1601 ProxyInfo info2; |
| 1578 TestCompletionCallback callback2; | 1602 TestCompletionCallback callback2; |
| 1579 rv = service->ResolveProxy( | 1603 rv = service->ResolveProxy( |
| 1580 GURL("http://www.google.com"), &info2, &callback2, NULL, NULL); | 1604 GURL("http://www.google.com"), &info2, &callback2, NULL, BoundNetLog()); |
| 1581 EXPECT_EQ(OK, rv); | 1605 EXPECT_EQ(OK, rv); |
| 1582 | 1606 |
| 1583 EXPECT_TRUE(info2.is_direct()); | 1607 EXPECT_TRUE(info2.is_direct()); |
| 1584 } | 1608 } |
| 1585 | 1609 |
| 1586 TEST(ProxyServiceTest, NetworkChangeTriggersPacRefetch) { | 1610 TEST(ProxyServiceTest, NetworkChangeTriggersPacRefetch) { |
| 1587 MockProxyConfigService* config_service = | 1611 MockProxyConfigService* config_service = |
| 1588 new MockProxyConfigService("http://foopy/proxy.pac"); | 1612 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 1589 | 1613 |
| 1590 MockAsyncProxyResolverExpectsBytes* resolver = | 1614 MockAsyncProxyResolverExpectsBytes* resolver = |
| 1591 new MockAsyncProxyResolverExpectsBytes; | 1615 new MockAsyncProxyResolverExpectsBytes; |
| 1592 | 1616 |
| 1593 MockNetworkChangeNotifier network_change_notifier; | 1617 MockNetworkChangeNotifier network_change_notifier; |
| 1594 | 1618 |
| 1595 scoped_refptr<ProxyService> service( | 1619 scoped_refptr<ProxyService> service( |
| 1596 new ProxyService(config_service, resolver, &network_change_notifier, | 1620 new ProxyService(config_service, resolver, &network_change_notifier, |
| 1597 BoundNetLog())); | 1621 NULL)); |
| 1598 | 1622 |
| 1599 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 1623 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| 1600 service->SetProxyScriptFetcher(fetcher); | 1624 service->SetProxyScriptFetcher(fetcher); |
| 1601 | 1625 |
| 1602 // Start 1 request. | 1626 // Start 1 request. |
| 1603 | 1627 |
| 1604 ProxyInfo info1; | 1628 ProxyInfo info1; |
| 1605 TestCompletionCallback callback1; | 1629 TestCompletionCallback callback1; |
| 1606 int rv = service->ResolveProxy( | 1630 int rv = service->ResolveProxy( |
| 1607 GURL("http://request1"), &info1, &callback1, NULL, NULL); | 1631 GURL("http://request1"), &info1, &callback1, NULL, BoundNetLog()); |
| 1608 EXPECT_EQ(ERR_IO_PENDING, rv); | 1632 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1609 | 1633 |
| 1610 // The first request should have triggered initial download of PAC script. | 1634 // The first request should have triggered initial download of PAC script. |
| 1611 EXPECT_TRUE(fetcher->has_pending_request()); | 1635 EXPECT_TRUE(fetcher->has_pending_request()); |
| 1612 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); | 1636 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
| 1613 | 1637 |
| 1614 // Nothing has been sent to the resolver yet. | 1638 // Nothing has been sent to the resolver yet. |
| 1615 EXPECT_TRUE(resolver->pending_requests().empty()); | 1639 EXPECT_TRUE(resolver->pending_requests().empty()); |
| 1616 | 1640 |
| 1617 // At this point the ProxyService should be waiting for the | 1641 // At this point the ProxyService should be waiting for the |
| (...skipping 20 matching lines...) Expand all Loading... |
| 1638 // Now simluate a change in the network. The ProxyConfigService is still | 1662 // Now simluate a change in the network. The ProxyConfigService is still |
| 1639 // going to return the same PAC URL as before, but this URL needs to be | 1663 // going to return the same PAC URL as before, but this URL needs to be |
| 1640 // refetched on the new network. | 1664 // refetched on the new network. |
| 1641 | 1665 |
| 1642 network_change_notifier.NotifyIPAddressChange(); | 1666 network_change_notifier.NotifyIPAddressChange(); |
| 1643 | 1667 |
| 1644 // Start a second request. | 1668 // Start a second request. |
| 1645 ProxyInfo info2; | 1669 ProxyInfo info2; |
| 1646 TestCompletionCallback callback2; | 1670 TestCompletionCallback callback2; |
| 1647 rv = service->ResolveProxy( | 1671 rv = service->ResolveProxy( |
| 1648 GURL("http://request2"), &info2, &callback2, NULL, NULL); | 1672 GURL("http://request2"), &info2, &callback2, NULL, BoundNetLog()); |
| 1649 EXPECT_EQ(ERR_IO_PENDING, rv); | 1673 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1650 | 1674 |
| 1651 // This second request should have triggered the re-download of the PAC | 1675 // This second request should have triggered the re-download of the PAC |
| 1652 // script (since we marked the network as having changed). | 1676 // script (since we marked the network as having changed). |
| 1653 EXPECT_TRUE(fetcher->has_pending_request()); | 1677 EXPECT_TRUE(fetcher->has_pending_request()); |
| 1654 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); | 1678 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
| 1655 | 1679 |
| 1656 // Nothing has been sent to the resolver yet. | 1680 // Nothing has been sent to the resolver yet. |
| 1657 EXPECT_TRUE(resolver->pending_requests().empty()); | 1681 EXPECT_TRUE(resolver->pending_requests().empty()); |
| 1658 | 1682 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1671 // Complete the pending second request. | 1695 // Complete the pending second request. |
| 1672 resolver->pending_requests()[0]->results()->UseNamedProxy("request2:80"); | 1696 resolver->pending_requests()[0]->results()->UseNamedProxy("request2:80"); |
| 1673 resolver->pending_requests()[0]->CompleteNow(OK); | 1697 resolver->pending_requests()[0]->CompleteNow(OK); |
| 1674 | 1698 |
| 1675 // Wait for completion callback, and verify that the request ran as expected. | 1699 // Wait for completion callback, and verify that the request ran as expected. |
| 1676 EXPECT_EQ(OK, callback2.WaitForResult()); | 1700 EXPECT_EQ(OK, callback2.WaitForResult()); |
| 1677 EXPECT_EQ("request2:80", info2.proxy_server().ToURI()); | 1701 EXPECT_EQ("request2:80", info2.proxy_server().ToURI()); |
| 1678 } | 1702 } |
| 1679 | 1703 |
| 1680 } // namespace net | 1704 } // namespace net |
| OLD | NEW |