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

Side by Side Diff: net/http/http_stream_factory_impl_job.cc

Issue 8898008: No longer preconnect to unsafe ports. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Add missing file Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « net/http/http_stream_factory_impl_job.h ('k') | net/http/http_stream_factory_impl_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/http/http_stream_factory_impl_job.h" 5 #include "net/http/http_stream_factory_impl_job.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/stl_util.h" 9 #include "base/stl_util.h"
10 #include "base/string_util.h" 10 #include "base/string_util.h"
(...skipping 467 matching lines...) Expand 10 before | Expand all | Expand 10 after
478 return result; 478 return result;
479 } 479 }
480 480
481 int HttpStreamFactoryImpl::Job::DoLoop(int result) { 481 int HttpStreamFactoryImpl::Job::DoLoop(int result) {
482 DCHECK_NE(next_state_, STATE_NONE); 482 DCHECK_NE(next_state_, STATE_NONE);
483 int rv = result; 483 int rv = result;
484 do { 484 do {
485 State state = next_state_; 485 State state = next_state_;
486 next_state_ = STATE_NONE; 486 next_state_ = STATE_NONE;
487 switch (state) { 487 switch (state) {
488 case STATE_START:
489 DCHECK_EQ(OK, rv);
490 rv = DoStart();
491 break;
488 case STATE_RESOLVE_PROXY: 492 case STATE_RESOLVE_PROXY:
489 DCHECK_EQ(OK, rv); 493 DCHECK_EQ(OK, rv);
490 rv = DoResolveProxy(); 494 rv = DoResolveProxy();
491 break; 495 break;
492 case STATE_RESOLVE_PROXY_COMPLETE: 496 case STATE_RESOLVE_PROXY_COMPLETE:
493 rv = DoResolveProxyComplete(rv); 497 rv = DoResolveProxyComplete(rv);
494 break; 498 break;
495 case STATE_WAIT_FOR_JOB: 499 case STATE_WAIT_FOR_JOB:
496 DCHECK_EQ(OK, rv); 500 DCHECK_EQ(OK, rv);
497 rv = DoWaitForJob(); 501 rv = DoWaitForJob();
(...skipping 29 matching lines...) Expand all
527 NOTREACHED() << "bad state"; 531 NOTREACHED() << "bad state";
528 rv = ERR_FAILED; 532 rv = ERR_FAILED;
529 break; 533 break;
530 } 534 }
531 } while (rv != ERR_IO_PENDING && next_state_ != STATE_NONE); 535 } while (rv != ERR_IO_PENDING && next_state_ != STATE_NONE);
532 return rv; 536 return rv;
533 } 537 }
534 538
535 int HttpStreamFactoryImpl::Job::StartInternal() { 539 int HttpStreamFactoryImpl::Job::StartInternal() {
536 CHECK_EQ(STATE_NONE, next_state_); 540 CHECK_EQ(STATE_NONE, next_state_);
537 541 next_state_ = STATE_START;
538 origin_ = HostPortPair(request_info_.url.HostNoBrackets(),
539 request_info_.url.EffectiveIntPort());
540 origin_url_ = HttpStreamFactory::ApplyHostMappingRules(
541 request_info_.url, &origin_);
542
543 net_log_.BeginEvent(NetLog::TYPE_HTTP_STREAM_JOB, 542 net_log_.BeginEvent(NetLog::TYPE_HTTP_STREAM_JOB,
544 HttpStreamJobParameters::Create(request_info_.url, 543 HttpStreamJobParameters::Create(request_info_.url,
545 origin_url_)); 544 origin_url_));
wtc 2012/01/14 01:34:46 In the original code, we have already initialized
mmenke 2012/01/14 02:19:21 Definitely a bug. Thanks for spotting this.
546 next_state_ = STATE_RESOLVE_PROXY;
547 int rv = RunLoop(OK); 545 int rv = RunLoop(OK);
548 DCHECK_EQ(ERR_IO_PENDING, rv); 546 DCHECK_EQ(ERR_IO_PENDING, rv);
549 return rv; 547 return rv;
550 } 548 }
551 549
550 int HttpStreamFactoryImpl::Job::DoStart() {
willchan no longer on Chromium 2011/12/12 18:24:16 Almost all the rest of our states have DoFoo() and
mmenke 2011/12/12 18:43:21 Currently it's expected to always return asynchron
willchan no longer on Chromium 2011/12/12 19:04:58 Oh I see. I think I'd like to modify all call site
mmenke 2011/12/12 19:10:03 Sure, will do.
mmenke 2011/12/13 16:35:00 Making this able to fail synchronously is enough o
mmenke 2011/12/13 16:44:32 Or I could just add an OnStartComplete function th
551 // Don't connect to restricted ports.
552 int port = request_info_.url.EffectiveIntPort();
553 if (!IsPortAllowedByDefault(port) && !IsPortAllowedByOverride(port))
554 return ERR_UNSAFE_PORT;
wtc 2012/01/14 01:34:46 Before DoResolveProxyComplete() returns an error c
mmenke 2012/01/14 02:19:21 I agree. There's no fall through to automatically
555
556 origin_ = HostPortPair(request_info_.url.HostNoBrackets(), port);
557 origin_url_ = HttpStreamFactory::ApplyHostMappingRules(
558 request_info_.url, &origin_);
559
560 next_state_ = STATE_RESOLVE_PROXY;
561 return OK;
562 }
563
552 int HttpStreamFactoryImpl::Job::DoResolveProxy() { 564 int HttpStreamFactoryImpl::Job::DoResolveProxy() {
553 DCHECK(!pac_request_); 565 DCHECK(!pac_request_);
554 566
555 next_state_ = STATE_RESOLVE_PROXY_COMPLETE; 567 next_state_ = STATE_RESOLVE_PROXY_COMPLETE;
556 568
557 if (request_info_.load_flags & LOAD_BYPASS_PROXY) { 569 if (request_info_.load_flags & LOAD_BYPASS_PROXY) {
558 proxy_info_.UseDirect(); 570 proxy_info_.UseDirect();
559 return OK; 571 return OK;
560 } 572 }
561 573
(...skipping 14 matching lines...) Expand all
576 588
577 if (proxy_info_.is_empty()) { 589 if (proxy_info_.is_empty()) {
578 // No proxies/direct to choose from. This happens when we don't support 590 // No proxies/direct to choose from. This happens when we don't support
579 // any of the proxies in the returned list. 591 // any of the proxies in the returned list.
580 result = ERR_NO_SUPPORTED_PROXIES; 592 result = ERR_NO_SUPPORTED_PROXIES;
581 } 593 }
582 } 594 }
583 595
584 if (result != OK) { 596 if (result != OK) {
585 if (dependent_job_) 597 if (dependent_job_)
586 dependent_job_->Resume(this); 598 dependent_job_->Resume(this);
wtc 2012/01/14 01:34:46 Should we set dependent_job_ to NULL after calling
mmenke 2012/01/14 02:19:21 It shouldn't really be needed, since if we fail, t
587 return result; 599 return result;
588 } 600 }
589 601
590 if (blocking_job_) 602 if (blocking_job_)
591 next_state_ = STATE_WAIT_FOR_JOB; 603 next_state_ = STATE_WAIT_FOR_JOB;
592 else 604 else
593 next_state_ = STATE_INIT_CONNECTION; 605 next_state_ = STATE_INIT_CONNECTION;
594 return OK; 606 return OK;
595 } 607 }
596 608
(...skipping 595 matching lines...) Expand 10 before | Expand all | Expand 10 after
1192 return false; 1204 return false;
1193 } 1205 }
1194 if (request_info_.method != "GET" && request_info_.method != "HEAD") { 1206 if (request_info_.method != "GET" && request_info_.method != "HEAD") {
1195 return false; 1207 return false;
1196 } 1208 }
1197 return stream_factory_->http_pipelined_host_pool_.IsHostEligibleForPipelining( 1209 return stream_factory_->http_pipelined_host_pool_.IsHostEligibleForPipelining(
1198 origin_); 1210 origin_);
1199 } 1211 }
1200 1212
1201 } // namespace net 1213 } // namespace net
OLDNEW
« no previous file with comments | « net/http/http_stream_factory_impl_job.h ('k') | net/http/http_stream_factory_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698