OLD | NEW |
1 // Copyright (c) 2016 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2016 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/http/http_stream_factory_impl_job_controller.h" | 5 #include "net/http/http_stream_factory_impl_job_controller.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 | 8 |
9 #include "base/memory/ptr_util.h" | 9 #include "base/memory/ptr_util.h" |
10 #include "base/run_loop.h" | 10 #include "base/run_loop.h" |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
55 class FailingHostResolver : public MockHostResolverBase { | 55 class FailingHostResolver : public MockHostResolverBase { |
56 public: | 56 public: |
57 FailingHostResolver() : MockHostResolverBase(false /*use_caching*/) {} | 57 FailingHostResolver() : MockHostResolverBase(false /*use_caching*/) {} |
58 ~FailingHostResolver() override {} | 58 ~FailingHostResolver() override {} |
59 | 59 |
60 int Resolve(const RequestInfo& info, | 60 int Resolve(const RequestInfo& info, |
61 RequestPriority priority, | 61 RequestPriority priority, |
62 AddressList* addresses, | 62 AddressList* addresses, |
63 const CompletionCallback& callback, | 63 const CompletionCallback& callback, |
64 std::unique_ptr<Request>* out_req, | 64 std::unique_ptr<Request>* out_req, |
65 const BoundNetLog& net_log) override { | 65 const NetLogWithSource& net_log) override { |
66 return ERR_NAME_NOT_RESOLVED; | 66 return ERR_NAME_NOT_RESOLVED; |
67 } | 67 } |
68 }; | 68 }; |
69 | 69 |
70 class HangingResolver : public MockHostResolverBase { | 70 class HangingResolver : public MockHostResolverBase { |
71 public: | 71 public: |
72 HangingResolver() : MockHostResolverBase(false /*use_caching*/) {} | 72 HangingResolver() : MockHostResolverBase(false /*use_caching*/) {} |
73 ~HangingResolver() override {} | 73 ~HangingResolver() override {} |
74 | 74 |
75 int Resolve(const RequestInfo& info, | 75 int Resolve(const RequestInfo& info, |
76 RequestPriority priority, | 76 RequestPriority priority, |
77 AddressList* addresses, | 77 AddressList* addresses, |
78 const CompletionCallback& callback, | 78 const CompletionCallback& callback, |
79 std::unique_ptr<Request>* out_req, | 79 std::unique_ptr<Request>* out_req, |
80 const BoundNetLog& net_log) override { | 80 const NetLogWithSource& net_log) override { |
81 return ERR_IO_PENDING; | 81 return ERR_IO_PENDING; |
82 } | 82 } |
83 }; | 83 }; |
84 } // anonymous namespace | 84 } // anonymous namespace |
85 | 85 |
86 class HttpStreamFactoryImplJobPeer { | 86 class HttpStreamFactoryImplJobPeer { |
87 public: | 87 public: |
88 static void Start(HttpStreamFactoryImpl::Job* job, | 88 static void Start(HttpStreamFactoryImpl::Job* job, |
89 HttpStreamRequest::StreamType stream_type) { | 89 HttpStreamRequest::StreamType stream_type) { |
90 // Start() is mocked for MockHttpStreamFactoryImplJob. | 90 // Start() is mocked for MockHttpStreamFactoryImplJob. |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
190 new ProxyService(base::MakeUnique<ProxyConfigServiceFixed>(proxy_config), | 190 new ProxyService(base::MakeUnique<ProxyConfigServiceFixed>(proxy_config), |
191 base::WrapUnique(proxy_resolver_factory), nullptr)); | 191 base::WrapUnique(proxy_resolver_factory), nullptr)); |
192 Initialize(false); | 192 Initialize(false); |
193 | 193 |
194 HttpRequestInfo request_info; | 194 HttpRequestInfo request_info; |
195 request_info.method = "GET"; | 195 request_info.method = "GET"; |
196 request_info.url = GURL("http://www.google.com"); | 196 request_info.url = GURL("http://www.google.com"); |
197 | 197 |
198 request_.reset( | 198 request_.reset( |
199 job_controller_->Start(request_info, &request_delegate_, nullptr, | 199 job_controller_->Start(request_info, &request_delegate_, nullptr, |
200 BoundNetLog(), HttpStreamRequest::HTTP_STREAM, | 200 NetLogWithSource(), HttpStreamRequest::HTTP_STREAM, |
201 DEFAULT_PRIORITY, SSLConfig(), SSLConfig())); | 201 DEFAULT_PRIORITY, SSLConfig(), SSLConfig())); |
202 | 202 |
203 EXPECT_TRUE(job_controller_->main_job()); | 203 EXPECT_TRUE(job_controller_->main_job()); |
204 | 204 |
205 // There's no other alternative job. Thus when stream failed, it should | 205 // There's no other alternative job. Thus when stream failed, it should |
206 // notify Request of the stream failure. | 206 // notify Request of the stream failure. |
207 EXPECT_CALL(request_delegate_, OnStreamFailed(ERR_FAILED, _)).Times(1); | 207 EXPECT_CALL(request_delegate_, OnStreamFailed(ERR_FAILED, _)).Times(1); |
208 job_controller_->OnStreamFailed(job_factory_.main_job(), ERR_FAILED, | 208 job_controller_->OnStreamFailed(job_factory_.main_job(), ERR_FAILED, |
209 SSLConfig()); | 209 SSLConfig()); |
210 } | 210 } |
211 | 211 |
212 TEST_F(HttpStreamFactoryImplJobControllerTest, | 212 TEST_F(HttpStreamFactoryImplJobControllerTest, |
213 OnStreamReadyWithNoAlternativeJob) { | 213 OnStreamReadyWithNoAlternativeJob) { |
214 ProxyConfig proxy_config; | 214 ProxyConfig proxy_config; |
215 proxy_config.set_auto_detect(true); | 215 proxy_config.set_auto_detect(true); |
216 // Use asynchronous proxy resolver. | 216 // Use asynchronous proxy resolver. |
217 MockAsyncProxyResolverFactory* proxy_resolver_factory = | 217 MockAsyncProxyResolverFactory* proxy_resolver_factory = |
218 new MockAsyncProxyResolverFactory(false); | 218 new MockAsyncProxyResolverFactory(false); |
219 session_deps_.proxy_service.reset( | 219 session_deps_.proxy_service.reset( |
220 new ProxyService(base::MakeUnique<ProxyConfigServiceFixed>(proxy_config), | 220 new ProxyService(base::MakeUnique<ProxyConfigServiceFixed>(proxy_config), |
221 base::WrapUnique(proxy_resolver_factory), nullptr)); | 221 base::WrapUnique(proxy_resolver_factory), nullptr)); |
222 Initialize(false); | 222 Initialize(false); |
223 | 223 |
224 HttpRequestInfo request_info; | 224 HttpRequestInfo request_info; |
225 request_info.method = "GET"; | 225 request_info.method = "GET"; |
226 request_info.url = GURL("http://www.google.com"); | 226 request_info.url = GURL("http://www.google.com"); |
227 | 227 |
228 request_.reset( | 228 request_.reset( |
229 job_controller_->Start(request_info, &request_delegate_, nullptr, | 229 job_controller_->Start(request_info, &request_delegate_, nullptr, |
230 BoundNetLog(), HttpStreamRequest::HTTP_STREAM, | 230 NetLogWithSource(), HttpStreamRequest::HTTP_STREAM, |
231 DEFAULT_PRIORITY, SSLConfig(), SSLConfig())); | 231 DEFAULT_PRIORITY, SSLConfig(), SSLConfig())); |
232 | 232 |
233 // There's no other alternative job. Thus when a stream is ready, it should | 233 // There's no other alternative job. Thus when a stream is ready, it should |
234 // notify Request. | 234 // notify Request. |
235 HttpStream* http_stream = | 235 HttpStream* http_stream = |
236 new HttpBasicStream(base::MakeUnique<ClientSocketHandle>(), false, false); | 236 new HttpBasicStream(base::MakeUnique<ClientSocketHandle>(), false, false); |
237 job_factory_.main_job()->SetStream(http_stream); | 237 job_factory_.main_job()->SetStream(http_stream); |
238 | 238 |
239 EXPECT_CALL(request_delegate_, OnStreamReady(_, _, http_stream)) | 239 EXPECT_CALL(request_delegate_, OnStreamReady(_, _, http_stream)) |
240 .WillOnce(Invoke(DeleteHttpStreamPointer)); | 240 .WillOnce(Invoke(DeleteHttpStreamPointer)); |
(...skipping 17 matching lines...) Expand all Loading... |
258 HttpRequestInfo request_info; | 258 HttpRequestInfo request_info; |
259 request_info.method = "GET"; | 259 request_info.method = "GET"; |
260 request_info.url = GURL("https://www.google.com"); | 260 request_info.url = GURL("https://www.google.com"); |
261 | 261 |
262 url::SchemeHostPort server(request_info.url); | 262 url::SchemeHostPort server(request_info.url); |
263 AlternativeService alternative_service(QUIC, server.host(), 443); | 263 AlternativeService alternative_service(QUIC, server.host(), 443); |
264 SetAlternativeService(request_info, alternative_service); | 264 SetAlternativeService(request_info, alternative_service); |
265 | 265 |
266 request_.reset( | 266 request_.reset( |
267 job_controller_->Start(request_info, &request_delegate_, nullptr, | 267 job_controller_->Start(request_info, &request_delegate_, nullptr, |
268 BoundNetLog(), HttpStreamRequest::HTTP_STREAM, | 268 NetLogWithSource(), HttpStreamRequest::HTTP_STREAM, |
269 DEFAULT_PRIORITY, SSLConfig(), SSLConfig())); | 269 DEFAULT_PRIORITY, SSLConfig(), SSLConfig())); |
270 EXPECT_TRUE(job_controller_->main_job()); | 270 EXPECT_TRUE(job_controller_->main_job()); |
271 EXPECT_TRUE(job_controller_->alternative_job()); | 271 EXPECT_TRUE(job_controller_->alternative_job()); |
272 | 272 |
273 // Reset the Request will cancel all the Jobs since there's no Job determined | 273 // Reset the Request will cancel all the Jobs since there's no Job determined |
274 // to serve Request yet and JobController will notify the factory to delete | 274 // to serve Request yet and JobController will notify the factory to delete |
275 // itself upon completion. | 275 // itself upon completion. |
276 request_.reset(); | 276 request_.reset(); |
277 VerifyBrokenAlternateProtocolMapping(request_info, false); | 277 VerifyBrokenAlternateProtocolMapping(request_info, false); |
278 EXPECT_TRUE(HttpStreamFactoryImplPeer::IsJobControllerDeleted(factory_)); | 278 EXPECT_TRUE(HttpStreamFactoryImplPeer::IsJobControllerDeleted(factory_)); |
(...skipping 13 matching lines...) Expand all Loading... |
292 HttpRequestInfo request_info; | 292 HttpRequestInfo request_info; |
293 request_info.method = "GET"; | 293 request_info.method = "GET"; |
294 request_info.url = GURL("https://www.google.com"); | 294 request_info.url = GURL("https://www.google.com"); |
295 | 295 |
296 url::SchemeHostPort server(request_info.url); | 296 url::SchemeHostPort server(request_info.url); |
297 AlternativeService alternative_service(QUIC, server.host(), 443); | 297 AlternativeService alternative_service(QUIC, server.host(), 443); |
298 SetAlternativeService(request_info, alternative_service); | 298 SetAlternativeService(request_info, alternative_service); |
299 | 299 |
300 request_.reset( | 300 request_.reset( |
301 job_controller_->Start(request_info, &request_delegate_, nullptr, | 301 job_controller_->Start(request_info, &request_delegate_, nullptr, |
302 BoundNetLog(), HttpStreamRequest::HTTP_STREAM, | 302 NetLogWithSource(), HttpStreamRequest::HTTP_STREAM, |
303 DEFAULT_PRIORITY, SSLConfig(), SSLConfig())); | 303 DEFAULT_PRIORITY, SSLConfig(), SSLConfig())); |
304 EXPECT_TRUE(job_controller_->main_job()); | 304 EXPECT_TRUE(job_controller_->main_job()); |
305 EXPECT_TRUE(job_controller_->alternative_job()); | 305 EXPECT_TRUE(job_controller_->alternative_job()); |
306 | 306 |
307 // We have the main job with unknown status when the alternative job is failed | 307 // We have the main job with unknown status when the alternative job is failed |
308 // thus should not notify Request of the alternative job's failure. But should | 308 // thus should not notify Request of the alternative job's failure. But should |
309 // notify the main job to mark the alternative job failed. | 309 // notify the main job to mark the alternative job failed. |
310 EXPECT_CALL(request_delegate_, OnStreamFailed(_, _)).Times(0); | 310 EXPECT_CALL(request_delegate_, OnStreamFailed(_, _)).Times(0); |
311 job_controller_->OnStreamFailed(job_factory_.alternative_job(), ERR_FAILED, | 311 job_controller_->OnStreamFailed(job_factory_.alternative_job(), ERR_FAILED, |
312 SSLConfig()); | 312 SSLConfig()); |
(...skipping 23 matching lines...) Expand all Loading... |
336 HttpRequestInfo request_info; | 336 HttpRequestInfo request_info; |
337 request_info.method = "GET"; | 337 request_info.method = "GET"; |
338 request_info.url = GURL("https://www.google.com"); | 338 request_info.url = GURL("https://www.google.com"); |
339 | 339 |
340 url::SchemeHostPort server(request_info.url); | 340 url::SchemeHostPort server(request_info.url); |
341 AlternativeService alternative_service(QUIC, server.host(), 443); | 341 AlternativeService alternative_service(QUIC, server.host(), 443); |
342 SetAlternativeService(request_info, alternative_service); | 342 SetAlternativeService(request_info, alternative_service); |
343 | 343 |
344 request_.reset( | 344 request_.reset( |
345 job_controller_->Start(request_info, &request_delegate_, nullptr, | 345 job_controller_->Start(request_info, &request_delegate_, nullptr, |
346 BoundNetLog(), HttpStreamRequest::HTTP_STREAM, | 346 NetLogWithSource(), HttpStreamRequest::HTTP_STREAM, |
347 DEFAULT_PRIORITY, SSLConfig(), SSLConfig())); | 347 DEFAULT_PRIORITY, SSLConfig(), SSLConfig())); |
348 EXPECT_TRUE(job_controller_->main_job()); | 348 EXPECT_TRUE(job_controller_->main_job()); |
349 EXPECT_TRUE(job_controller_->alternative_job()); | 349 EXPECT_TRUE(job_controller_->alternative_job()); |
350 | 350 |
351 // Main job succeeds, starts serving Request and it should report status | 351 // Main job succeeds, starts serving Request and it should report status |
352 // to Request. The alternative job will mark the main job complete and gets | 352 // to Request. The alternative job will mark the main job complete and gets |
353 // orphaned. | 353 // orphaned. |
354 HttpStream* http_stream = | 354 HttpStream* http_stream = |
355 new HttpBasicStream(base::MakeUnique<ClientSocketHandle>(), false, false); | 355 new HttpBasicStream(base::MakeUnique<ClientSocketHandle>(), false, false); |
356 job_factory_.main_job()->SetStream(http_stream); | 356 job_factory_.main_job()->SetStream(http_stream); |
(...skipping 30 matching lines...) Expand all Loading... |
387 HttpRequestInfo request_info; | 387 HttpRequestInfo request_info; |
388 request_info.method = "GET"; | 388 request_info.method = "GET"; |
389 request_info.url = GURL("https://www.google.com"); | 389 request_info.url = GURL("https://www.google.com"); |
390 | 390 |
391 url::SchemeHostPort server(request_info.url); | 391 url::SchemeHostPort server(request_info.url); |
392 AlternativeService alternative_service(QUIC, server.host(), 443); | 392 AlternativeService alternative_service(QUIC, server.host(), 443); |
393 SetAlternativeService(request_info, alternative_service); | 393 SetAlternativeService(request_info, alternative_service); |
394 | 394 |
395 request_.reset( | 395 request_.reset( |
396 job_controller_->Start(request_info, &request_delegate_, nullptr, | 396 job_controller_->Start(request_info, &request_delegate_, nullptr, |
397 BoundNetLog(), HttpStreamRequest::HTTP_STREAM, | 397 NetLogWithSource(), HttpStreamRequest::HTTP_STREAM, |
398 DEFAULT_PRIORITY, SSLConfig(), SSLConfig())); | 398 DEFAULT_PRIORITY, SSLConfig(), SSLConfig())); |
399 EXPECT_TRUE(job_controller_->main_job()); | 399 EXPECT_TRUE(job_controller_->main_job()); |
400 EXPECT_TRUE(job_controller_->alternative_job()); | 400 EXPECT_TRUE(job_controller_->alternative_job()); |
401 | 401 |
402 // |main_job| fails but should not report status to Request. | 402 // |main_job| fails but should not report status to Request. |
403 EXPECT_CALL(request_delegate_, OnStreamFailed(_, _)).Times(0); | 403 EXPECT_CALL(request_delegate_, OnStreamFailed(_, _)).Times(0); |
404 | 404 |
405 job_controller_->OnStreamFailed(job_factory_.main_job(), ERR_FAILED, | 405 job_controller_->OnStreamFailed(job_factory_.main_job(), ERR_FAILED, |
406 SSLConfig()); | 406 SSLConfig()); |
407 | 407 |
(...skipping 24 matching lines...) Expand all Loading... |
432 HttpRequestInfo request_info; | 432 HttpRequestInfo request_info; |
433 request_info.method = "GET"; | 433 request_info.method = "GET"; |
434 request_info.url = GURL("https://www.google.com"); | 434 request_info.url = GURL("https://www.google.com"); |
435 | 435 |
436 url::SchemeHostPort server(request_info.url); | 436 url::SchemeHostPort server(request_info.url); |
437 AlternativeService alternative_service(QUIC, server.host(), 443); | 437 AlternativeService alternative_service(QUIC, server.host(), 443); |
438 SetAlternativeService(request_info, alternative_service); | 438 SetAlternativeService(request_info, alternative_service); |
439 | 439 |
440 request_.reset( | 440 request_.reset( |
441 job_controller_->Start(request_info, &request_delegate_, nullptr, | 441 job_controller_->Start(request_info, &request_delegate_, nullptr, |
442 BoundNetLog(), HttpStreamRequest::HTTP_STREAM, | 442 NetLogWithSource(), HttpStreamRequest::HTTP_STREAM, |
443 DEFAULT_PRIORITY, SSLConfig(), SSLConfig())); | 443 DEFAULT_PRIORITY, SSLConfig(), SSLConfig())); |
444 EXPECT_TRUE(job_controller_->main_job()); | 444 EXPECT_TRUE(job_controller_->main_job()); |
445 EXPECT_TRUE(job_controller_->alternative_job()); | 445 EXPECT_TRUE(job_controller_->alternative_job()); |
446 | 446 |
447 // |alternative_job| fails but should not report status to Request. | 447 // |alternative_job| fails but should not report status to Request. |
448 EXPECT_CALL(request_delegate_, OnStreamFailed(_, _)).Times(0); | 448 EXPECT_CALL(request_delegate_, OnStreamFailed(_, _)).Times(0); |
449 | 449 |
450 job_controller_->OnStreamFailed(job_factory_.alternative_job(), ERR_FAILED, | 450 job_controller_->OnStreamFailed(job_factory_.alternative_job(), ERR_FAILED, |
451 SSLConfig()); | 451 SSLConfig()); |
452 | 452 |
(...skipping 26 matching lines...) Expand all Loading... |
479 HttpRequestInfo request_info; | 479 HttpRequestInfo request_info; |
480 request_info.method = "GET"; | 480 request_info.method = "GET"; |
481 request_info.url = GURL("https://www.google.com"); | 481 request_info.url = GURL("https://www.google.com"); |
482 | 482 |
483 url::SchemeHostPort server(request_info.url); | 483 url::SchemeHostPort server(request_info.url); |
484 AlternativeService alternative_service(QUIC, server.host(), 443); | 484 AlternativeService alternative_service(QUIC, server.host(), 443); |
485 SetAlternativeService(request_info, alternative_service); | 485 SetAlternativeService(request_info, alternative_service); |
486 | 486 |
487 request_.reset( | 487 request_.reset( |
488 job_controller_->Start(request_info, &request_delegate_, nullptr, | 488 job_controller_->Start(request_info, &request_delegate_, nullptr, |
489 BoundNetLog(), HttpStreamRequest::HTTP_STREAM, | 489 NetLogWithSource(), HttpStreamRequest::HTTP_STREAM, |
490 DEFAULT_PRIORITY, SSLConfig(), SSLConfig())); | 490 DEFAULT_PRIORITY, SSLConfig(), SSLConfig())); |
491 EXPECT_TRUE(job_controller_->main_job()); | 491 EXPECT_TRUE(job_controller_->main_job()); |
492 EXPECT_TRUE(job_controller_->alternative_job()); | 492 EXPECT_TRUE(job_controller_->alternative_job()); |
493 | 493 |
494 // |main_job| fails but should not report status to Request. | 494 // |main_job| fails but should not report status to Request. |
495 // The alternative job will mark the main job complete. | 495 // The alternative job will mark the main job complete. |
496 EXPECT_CALL(request_delegate_, OnStreamFailed(_, _)).Times(0); | 496 EXPECT_CALL(request_delegate_, OnStreamFailed(_, _)).Times(0); |
497 | 497 |
498 job_controller_->OnStreamFailed(job_factory_.main_job(), ERR_FAILED, | 498 job_controller_->OnStreamFailed(job_factory_.main_job(), ERR_FAILED, |
499 SSLConfig()); | 499 SSLConfig()); |
(...skipping 28 matching lines...) Expand all Loading... |
528 HttpRequestInfo request_info; | 528 HttpRequestInfo request_info; |
529 request_info.method = "GET"; | 529 request_info.method = "GET"; |
530 request_info.url = GURL("https://www.google.com"); | 530 request_info.url = GURL("https://www.google.com"); |
531 | 531 |
532 url::SchemeHostPort server(request_info.url); | 532 url::SchemeHostPort server(request_info.url); |
533 AlternativeService alternative_service(QUIC, server.host(), 443); | 533 AlternativeService alternative_service(QUIC, server.host(), 443); |
534 SetAlternativeService(request_info, alternative_service); | 534 SetAlternativeService(request_info, alternative_service); |
535 | 535 |
536 request_.reset( | 536 request_.reset( |
537 job_controller_->Start(request_info, &request_delegate_, nullptr, | 537 job_controller_->Start(request_info, &request_delegate_, nullptr, |
538 BoundNetLog(), HttpStreamRequest::HTTP_STREAM, | 538 NetLogWithSource(), HttpStreamRequest::HTTP_STREAM, |
539 DEFAULT_PRIORITY, SSLConfig(), SSLConfig())); | 539 DEFAULT_PRIORITY, SSLConfig(), SSLConfig())); |
540 EXPECT_TRUE(job_controller_->main_job()); | 540 EXPECT_TRUE(job_controller_->main_job()); |
541 EXPECT_TRUE(job_controller_->alternative_job()); | 541 EXPECT_TRUE(job_controller_->alternative_job()); |
542 | 542 |
543 // Wait until OnStreamFailedCallback is executed on the alternative job. | 543 // Wait until OnStreamFailedCallback is executed on the alternative job. |
544 EXPECT_CALL(request_delegate_, OnStreamFailed(_, _)).Times(1); | 544 EXPECT_CALL(request_delegate_, OnStreamFailed(_, _)).Times(1); |
545 base::RunLoop().RunUntilIdle(); | 545 base::RunLoop().RunUntilIdle(); |
546 } | 546 } |
547 | 547 |
548 TEST_F(HttpStreamFactoryImplJobControllerTest, InvalidPortForQuic) { | 548 TEST_F(HttpStreamFactoryImplJobControllerTest, InvalidPortForQuic) { |
549 // Using a restricted port 101 for QUIC should fail and the alternative job | 549 // Using a restricted port 101 for QUIC should fail and the alternative job |
550 // should post OnStreamFailedCall on the controller to resume the main job. | 550 // should post OnStreamFailedCall on the controller to resume the main job. |
551 Initialize(false); | 551 Initialize(false); |
552 | 552 |
553 HttpRequestInfo request_info; | 553 HttpRequestInfo request_info; |
554 request_info.method = "GET"; | 554 request_info.method = "GET"; |
555 request_info.url = GURL("https://www.google.com"); | 555 request_info.url = GURL("https://www.google.com"); |
556 | 556 |
557 url::SchemeHostPort server(request_info.url); | 557 url::SchemeHostPort server(request_info.url); |
558 AlternativeService alternative_service(QUIC, server.host(), 101); | 558 AlternativeService alternative_service(QUIC, server.host(), 101); |
559 SetAlternativeService(request_info, alternative_service); | 559 SetAlternativeService(request_info, alternative_service); |
560 | 560 |
561 request_.reset( | 561 request_.reset( |
562 job_controller_->Start(request_info, &request_delegate_, nullptr, | 562 job_controller_->Start(request_info, &request_delegate_, nullptr, |
563 BoundNetLog(), HttpStreamRequest::HTTP_STREAM, | 563 NetLogWithSource(), HttpStreamRequest::HTTP_STREAM, |
564 DEFAULT_PRIORITY, SSLConfig(), SSLConfig())); | 564 DEFAULT_PRIORITY, SSLConfig(), SSLConfig())); |
565 | 565 |
566 EXPECT_TRUE(job_factory_.main_job()->is_waiting()); | 566 EXPECT_TRUE(job_factory_.main_job()->is_waiting()); |
567 | 567 |
568 // Wait until OnStreamFailedCallback is executed on the alternative job. | 568 // Wait until OnStreamFailedCallback is executed on the alternative job. |
569 EXPECT_CALL(*job_factory_.main_job(), Resume()).Times(1); | 569 EXPECT_CALL(*job_factory_.main_job(), Resume()).Times(1); |
570 base::RunLoop().RunUntilIdle(); | 570 base::RunLoop().RunUntilIdle(); |
571 } | 571 } |
572 | 572 |
573 TEST_F(HttpStreamFactoryImplJobControllerTest, | 573 TEST_F(HttpStreamFactoryImplJobControllerTest, |
(...skipping 24 matching lines...) Expand all Loading... |
598 // Set a SPDY alternative service for the server. | 598 // Set a SPDY alternative service for the server. |
599 url::SchemeHostPort server(request_info.url); | 599 url::SchemeHostPort server(request_info.url); |
600 AlternativeService alternative_service(QUIC, server.host(), 443); | 600 AlternativeService alternative_service(QUIC, server.host(), 443); |
601 SetAlternativeService(request_info, alternative_service); | 601 SetAlternativeService(request_info, alternative_service); |
602 // Hack to use different URL for the main job to help differentiate the proxy | 602 // Hack to use different URL for the main job to help differentiate the proxy |
603 // requests. | 603 // requests. |
604 job_factory_.UseDifferentURLForMainJob(GURL("http://www.google.com")); | 604 job_factory_.UseDifferentURLForMainJob(GURL("http://www.google.com")); |
605 | 605 |
606 request_.reset( | 606 request_.reset( |
607 job_controller_->Start(request_info, &request_delegate_, nullptr, | 607 job_controller_->Start(request_info, &request_delegate_, nullptr, |
608 BoundNetLog(), HttpStreamRequest::HTTP_STREAM, | 608 NetLogWithSource(), HttpStreamRequest::HTTP_STREAM, |
609 DEFAULT_PRIORITY, SSLConfig(), SSLConfig())); | 609 DEFAULT_PRIORITY, SSLConfig(), SSLConfig())); |
610 // Both jobs should be created but stalled as proxy resolution not completed. | 610 // Both jobs should be created but stalled as proxy resolution not completed. |
611 EXPECT_TRUE(job_controller_->main_job()); | 611 EXPECT_TRUE(job_controller_->main_job()); |
612 EXPECT_TRUE(job_controller_->alternative_job()); | 612 EXPECT_TRUE(job_controller_->alternative_job()); |
613 | 613 |
614 MockAsyncProxyResolver resolver; | 614 MockAsyncProxyResolver resolver; |
615 proxy_resolver_factory->pending_requests()[0]->CompleteNowWithForwarder( | 615 proxy_resolver_factory->pending_requests()[0]->CompleteNowWithForwarder( |
616 net::OK, &resolver); | 616 net::OK, &resolver); |
617 | 617 |
618 // Resolve proxy for the main job which then proceed to wait for the | 618 // Resolve proxy for the main job which then proceed to wait for the |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
660 | 660 |
661 url::SchemeHostPort server(request_info.url); | 661 url::SchemeHostPort server(request_info.url); |
662 AlternativeService alternative_service(QUIC, server.host(), 443); | 662 AlternativeService alternative_service(QUIC, server.host(), 443); |
663 SetAlternativeService(request_info, alternative_service); | 663 SetAlternativeService(request_info, alternative_service); |
664 // Hack to use different URL for the main job to help differentiate the proxy | 664 // Hack to use different URL for the main job to help differentiate the proxy |
665 // requests. | 665 // requests. |
666 job_factory_.UseDifferentURLForMainJob(GURL("http://www.google.com")); | 666 job_factory_.UseDifferentURLForMainJob(GURL("http://www.google.com")); |
667 | 667 |
668 request_.reset( | 668 request_.reset( |
669 job_controller_->Start(request_info, &request_delegate_, nullptr, | 669 job_controller_->Start(request_info, &request_delegate_, nullptr, |
670 BoundNetLog(), HttpStreamRequest::HTTP_STREAM, | 670 NetLogWithSource(), HttpStreamRequest::HTTP_STREAM, |
671 DEFAULT_PRIORITY, SSLConfig(), SSLConfig())); | 671 DEFAULT_PRIORITY, SSLConfig(), SSLConfig())); |
672 EXPECT_TRUE(job_controller_->main_job()); | 672 EXPECT_TRUE(job_controller_->main_job()); |
673 EXPECT_TRUE(job_controller_->alternative_job()); | 673 EXPECT_TRUE(job_controller_->alternative_job()); |
674 | 674 |
675 MockAsyncProxyResolver resolver; | 675 MockAsyncProxyResolver resolver; |
676 proxy_resolver_factory->pending_requests()[0]->CompleteNowWithForwarder( | 676 proxy_resolver_factory->pending_requests()[0]->CompleteNowWithForwarder( |
677 net::OK, &resolver); | 677 net::OK, &resolver); |
678 | 678 |
679 // Resolve proxy for the main job which then proceed to wait for the | 679 // Resolve proxy for the main job which then proceed to wait for the |
680 // alternative job which is IO_PENDING. | 680 // alternative job which is IO_PENDING. |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
719 request_info.method = "GET"; | 719 request_info.method = "GET"; |
720 request_info.url = GURL("https://www.google.com"); | 720 request_info.url = GURL("https://www.google.com"); |
721 | 721 |
722 // Set a SPDY alternative service for the server. | 722 // Set a SPDY alternative service for the server. |
723 url::SchemeHostPort server(request_info.url); | 723 url::SchemeHostPort server(request_info.url); |
724 AlternativeService alternative_service(QUIC, server.host(), 443); | 724 AlternativeService alternative_service(QUIC, server.host(), 443); |
725 SetAlternativeService(request_info, alternative_service); | 725 SetAlternativeService(request_info, alternative_service); |
726 | 726 |
727 request_.reset( | 727 request_.reset( |
728 job_controller_->Start(request_info, &request_delegate_, nullptr, | 728 job_controller_->Start(request_info, &request_delegate_, nullptr, |
729 BoundNetLog(), HttpStreamRequest::HTTP_STREAM, | 729 NetLogWithSource(), HttpStreamRequest::HTTP_STREAM, |
730 DEFAULT_PRIORITY, SSLConfig(), SSLConfig())); | 730 DEFAULT_PRIORITY, SSLConfig(), SSLConfig())); |
731 EXPECT_TRUE(job_controller_->main_job()); | 731 EXPECT_TRUE(job_controller_->main_job()); |
732 EXPECT_TRUE(job_controller_->alternative_job()); | 732 EXPECT_TRUE(job_controller_->alternative_job()); |
733 | 733 |
734 // The alternative job stalls as host resolution hangs when creating the QUIC | 734 // The alternative job stalls as host resolution hangs when creating the QUIC |
735 // request and controller should resume the main job after delay. | 735 // request and controller should resume the main job after delay. |
736 // Verify the waiting time for delayed main job. | 736 // Verify the waiting time for delayed main job. |
737 EXPECT_CALL(*job_factory_.main_job(), Resume()) | 737 EXPECT_CALL(*job_factory_.main_job(), Resume()) |
738 .WillOnce(Invoke(testing::CreateFunctor( | 738 .WillOnce(Invoke(testing::CreateFunctor( |
739 &JobControllerPeer::VerifyWaitingTimeForMainJob, job_controller_, | 739 &JobControllerPeer::VerifyWaitingTimeForMainJob, job_controller_, |
(...skipping 11 matching lines...) Expand all Loading... |
751 | 751 |
752 Initialize(true); | 752 Initialize(true); |
753 EXPECT_TRUE(test_proxy_delegate()->alternative_proxy_server().is_quic()); | 753 EXPECT_TRUE(test_proxy_delegate()->alternative_proxy_server().is_quic()); |
754 | 754 |
755 HttpRequestInfo request_info; | 755 HttpRequestInfo request_info; |
756 request_info.method = "GET"; | 756 request_info.method = "GET"; |
757 request_info.url = GURL("https://mail.example.org/"); | 757 request_info.url = GURL("https://mail.example.org/"); |
758 | 758 |
759 request_.reset( | 759 request_.reset( |
760 job_controller_->Start(request_info, &request_delegate_, nullptr, | 760 job_controller_->Start(request_info, &request_delegate_, nullptr, |
761 BoundNetLog(), HttpStreamRequest::HTTP_STREAM, | 761 NetLogWithSource(), HttpStreamRequest::HTTP_STREAM, |
762 DEFAULT_PRIORITY, SSLConfig(), SSLConfig())); | 762 DEFAULT_PRIORITY, SSLConfig(), SSLConfig())); |
763 EXPECT_TRUE(job_controller_->main_job()); | 763 EXPECT_TRUE(job_controller_->main_job()); |
764 EXPECT_FALSE(job_controller_->main_job()->is_waiting()); | 764 EXPECT_FALSE(job_controller_->main_job()->is_waiting()); |
765 EXPECT_FALSE(job_controller_->alternative_job()); | 765 EXPECT_FALSE(job_controller_->alternative_job()); |
766 | 766 |
767 EXPECT_CALL(*job_factory_.main_job(), Resume()).Times(0); | 767 EXPECT_CALL(*job_factory_.main_job(), Resume()).Times(0); |
768 base::RunLoop().RunUntilIdle(); | 768 base::RunLoop().RunUntilIdle(); |
769 EXPECT_EQ(0, test_proxy_delegate()->get_alternative_proxy_invocations()); | 769 EXPECT_EQ(0, test_proxy_delegate()->get_alternative_proxy_invocations()); |
770 } | 770 } |
771 | 771 |
772 // Verifies that the alternative proxy server job is not created if the main job | 772 // Verifies that the alternative proxy server job is not created if the main job |
773 // does not fetch the resource through a proxy. | 773 // does not fetch the resource through a proxy. |
774 TEST_F(HttpStreamFactoryImplJobControllerTest, HttpURLWithNoProxy) { | 774 TEST_F(HttpStreamFactoryImplJobControllerTest, HttpURLWithNoProxy) { |
775 // Using hanging resolver will cause the alternative job to hang indefinitely. | 775 // Using hanging resolver will cause the alternative job to hang indefinitely. |
776 HangingResolver* resolver = new HangingResolver(); | 776 HangingResolver* resolver = new HangingResolver(); |
777 session_deps_.host_resolver.reset(resolver); | 777 session_deps_.host_resolver.reset(resolver); |
778 | 778 |
779 Initialize(false); | 779 Initialize(false); |
780 EXPECT_TRUE(test_proxy_delegate()->alternative_proxy_server().is_quic()); | 780 EXPECT_TRUE(test_proxy_delegate()->alternative_proxy_server().is_quic()); |
781 | 781 |
782 HttpRequestInfo request_info; | 782 HttpRequestInfo request_info; |
783 request_info.method = "GET"; | 783 request_info.method = "GET"; |
784 request_info.url = GURL("http://mail.example.org/"); | 784 request_info.url = GURL("http://mail.example.org/"); |
785 | 785 |
786 request_.reset( | 786 request_.reset( |
787 job_controller_->Start(request_info, &request_delegate_, nullptr, | 787 job_controller_->Start(request_info, &request_delegate_, nullptr, |
788 BoundNetLog(), HttpStreamRequest::HTTP_STREAM, | 788 NetLogWithSource(), HttpStreamRequest::HTTP_STREAM, |
789 DEFAULT_PRIORITY, SSLConfig(), SSLConfig())); | 789 DEFAULT_PRIORITY, SSLConfig(), SSLConfig())); |
790 EXPECT_TRUE(job_controller_->main_job()); | 790 EXPECT_TRUE(job_controller_->main_job()); |
791 EXPECT_FALSE(job_controller_->main_job()->is_waiting()); | 791 EXPECT_FALSE(job_controller_->main_job()->is_waiting()); |
792 EXPECT_FALSE(job_controller_->alternative_job()); | 792 EXPECT_FALSE(job_controller_->alternative_job()); |
793 | 793 |
794 EXPECT_CALL(*job_factory_.main_job(), Resume()).Times(0); | 794 EXPECT_CALL(*job_factory_.main_job(), Resume()).Times(0); |
795 base::RunLoop().RunUntilIdle(); | 795 base::RunLoop().RunUntilIdle(); |
796 | 796 |
797 EXPECT_EQ(0, test_proxy_delegate()->get_alternative_proxy_invocations()); | 797 EXPECT_EQ(0, test_proxy_delegate()->get_alternative_proxy_invocations()); |
798 } | 798 } |
(...skipping 16 matching lines...) Expand all Loading... |
815 stats1.srtt = base::TimeDelta::FromMicroseconds(10); | 815 stats1.srtt = base::TimeDelta::FromMicroseconds(10); |
816 session_->http_server_properties()->SetServerNetworkStats( | 816 session_->http_server_properties()->SetServerNetworkStats( |
817 url::SchemeHostPort(GURL("https://myproxy.org")), stats1); | 817 url::SchemeHostPort(GURL("https://myproxy.org")), stats1); |
818 | 818 |
819 HttpRequestInfo request_info; | 819 HttpRequestInfo request_info; |
820 request_info.method = "GET"; | 820 request_info.method = "GET"; |
821 request_info.url = GURL("http://mail.example.org/"); | 821 request_info.url = GURL("http://mail.example.org/"); |
822 | 822 |
823 request_.reset( | 823 request_.reset( |
824 job_controller_->Start(request_info, &request_delegate_, nullptr, | 824 job_controller_->Start(request_info, &request_delegate_, nullptr, |
825 BoundNetLog(), HttpStreamRequest::HTTP_STREAM, | 825 NetLogWithSource(), HttpStreamRequest::HTTP_STREAM, |
826 DEFAULT_PRIORITY, SSLConfig(), SSLConfig())); | 826 DEFAULT_PRIORITY, SSLConfig(), SSLConfig())); |
827 EXPECT_TRUE(job_controller_->main_job()); | 827 EXPECT_TRUE(job_controller_->main_job()); |
828 EXPECT_TRUE(job_controller_->main_job()->is_waiting()); | 828 EXPECT_TRUE(job_controller_->main_job()->is_waiting()); |
829 EXPECT_TRUE(job_controller_->alternative_job()); | 829 EXPECT_TRUE(job_controller_->alternative_job()); |
830 EXPECT_TRUE(JobControllerPeer::main_job_is_blocked(job_controller_)); | 830 EXPECT_TRUE(JobControllerPeer::main_job_is_blocked(job_controller_)); |
831 | 831 |
832 // The alternative proxy server job stalls when connecting to the alternative | 832 // The alternative proxy server job stalls when connecting to the alternative |
833 // proxy server, and controller should resume the main job after delay. | 833 // proxy server, and controller should resume the main job after delay. |
834 // Verify the waiting time for delayed main job. | 834 // Verify the waiting time for delayed main job. |
835 EXPECT_CALL(*job_factory_.main_job(), Resume()) | 835 EXPECT_CALL(*job_factory_.main_job(), Resume()) |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
876 stats1.srtt = base::TimeDelta::FromMicroseconds(300 * 1000); | 876 stats1.srtt = base::TimeDelta::FromMicroseconds(300 * 1000); |
877 session_->http_server_properties()->SetServerNetworkStats( | 877 session_->http_server_properties()->SetServerNetworkStats( |
878 url::SchemeHostPort(GURL("https://myproxy.org")), stats1); | 878 url::SchemeHostPort(GURL("https://myproxy.org")), stats1); |
879 | 879 |
880 HttpRequestInfo request_info; | 880 HttpRequestInfo request_info; |
881 request_info.method = "GET"; | 881 request_info.method = "GET"; |
882 request_info.url = GURL("http://mail.example.org/"); | 882 request_info.url = GURL("http://mail.example.org/"); |
883 | 883 |
884 request_.reset( | 884 request_.reset( |
885 job_controller_->Start(request_info, &request_delegate_, nullptr, | 885 job_controller_->Start(request_info, &request_delegate_, nullptr, |
886 BoundNetLog(), HttpStreamRequest::HTTP_STREAM, | 886 NetLogWithSource(), HttpStreamRequest::HTTP_STREAM, |
887 DEFAULT_PRIORITY, SSLConfig(), SSLConfig())); | 887 DEFAULT_PRIORITY, SSLConfig(), SSLConfig())); |
888 EXPECT_TRUE(job_controller_->main_job()->is_waiting()); | 888 EXPECT_TRUE(job_controller_->main_job()->is_waiting()); |
889 EXPECT_TRUE(job_controller_->alternative_job()); | 889 EXPECT_TRUE(job_controller_->alternative_job()); |
890 | 890 |
891 EXPECT_CALL(request_delegate_, OnStreamReady(_, _, _)).Times(0); | 891 EXPECT_CALL(request_delegate_, OnStreamReady(_, _, _)).Times(0); |
892 | 892 |
893 // Since the alternative proxy server job is started in the next message loop, | 893 // Since the alternative proxy server job is started in the next message loop, |
894 // the main job would remain blocked until the alternative proxy starts, and | 894 // the main job would remain blocked until the alternative proxy starts, and |
895 // fails. | 895 // fails. |
896 EXPECT_CALL(*job_factory_.main_job(), Resume()) | 896 EXPECT_CALL(*job_factory_.main_job(), Resume()) |
(...skipping 16 matching lines...) Expand all Loading... |
913 Initialize(true); | 913 Initialize(true); |
914 | 914 |
915 HttpRequestInfo request_info; | 915 HttpRequestInfo request_info; |
916 request_info.method = "GET"; | 916 request_info.method = "GET"; |
917 request_info.url = GURL("http://www.google.com"); | 917 request_info.url = GURL("http://www.google.com"); |
918 | 918 |
919 url::SchemeHostPort server(request_info.url); | 919 url::SchemeHostPort server(request_info.url); |
920 | 920 |
921 request_.reset( | 921 request_.reset( |
922 job_controller_->Start(request_info, &request_delegate_, nullptr, | 922 job_controller_->Start(request_info, &request_delegate_, nullptr, |
923 BoundNetLog(), HttpStreamRequest::HTTP_STREAM, | 923 NetLogWithSource(), HttpStreamRequest::HTTP_STREAM, |
924 DEFAULT_PRIORITY, SSLConfig(), SSLConfig())); | 924 DEFAULT_PRIORITY, SSLConfig(), SSLConfig())); |
925 EXPECT_TRUE(job_controller_->main_job()); | 925 EXPECT_TRUE(job_controller_->main_job()); |
926 EXPECT_TRUE(job_controller_->alternative_job()); | 926 EXPECT_TRUE(job_controller_->alternative_job()); |
927 | 927 |
928 // Main job succeeds, starts serving Request and it should report status | 928 // Main job succeeds, starts serving Request and it should report status |
929 // to Request. The alternative job will mark the main job complete and gets | 929 // to Request. The alternative job will mark the main job complete and gets |
930 // orphaned. | 930 // orphaned. |
931 HttpStream* http_stream = | 931 HttpStream* http_stream = |
932 new HttpBasicStream(base::MakeUnique<ClientSocketHandle>(), false, false); | 932 new HttpBasicStream(base::MakeUnique<ClientSocketHandle>(), false, false); |
933 job_factory_.main_job()->SetStream(http_stream); | 933 job_factory_.main_job()->SetStream(http_stream); |
(...skipping 12 matching lines...) Expand all Loading... |
946 // Reset the request as it's been successfully served. | 946 // Reset the request as it's been successfully served. |
947 request_.reset(); | 947 request_.reset(); |
948 EXPECT_TRUE(HttpStreamFactoryImplPeer::IsJobControllerDeleted(factory_)); | 948 EXPECT_TRUE(HttpStreamFactoryImplPeer::IsJobControllerDeleted(factory_)); |
949 | 949 |
950 histogram_tester.ExpectUniqueSample("Net.QuicAlternativeProxy.Usage", | 950 histogram_tester.ExpectUniqueSample("Net.QuicAlternativeProxy.Usage", |
951 2 /* ALTERNATIVE_PROXY_USAGE_LOST_RACE */, | 951 2 /* ALTERNATIVE_PROXY_USAGE_LOST_RACE */, |
952 1); | 952 1); |
953 } | 953 } |
954 | 954 |
955 } // namespace net | 955 } // namespace net |
OLD | NEW |