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

Unified Diff: net/quic/quic_stream_factory.cc

Issue 1140153003: Disable 0RTT if server and origin have different hosts. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: net/quic/quic_stream_factory.cc
diff --git a/net/quic/quic_stream_factory.cc b/net/quic/quic_stream_factory.cc
index 7c24ecdaef4439814ed3cb2a0b246e2774bcabc0..4f4c7f8d69b273063255a903e3774ad3e4dd1605 100644
--- a/net/quic/quic_stream_factory.cc
+++ b/net/quic/quic_stream_factory.cc
@@ -139,7 +139,7 @@ class QuicStreamFactory::Job {
HostResolver* host_resolver,
const HostPortPair& host_port_pair,
bool is_https,
- bool was_alternate_protocol_recently_broken,
+ bool allow_zero_rtt,
PrivacyMode privacy_mode,
bool is_post,
QuicServerInfo* server_info,
@@ -194,7 +194,9 @@ class QuicStreamFactory::Job {
SingleRequestHostResolver host_resolver_;
QuicServerId server_id_;
bool is_post_;
- bool was_alternate_protocol_recently_broken_;
+ // True iff server and origin have the same hostname
Ryan Hamilton 2015/05/18 14:29:52 ditto
Bence 2015/05/18 15:17:54 ditto
+ // and alternative service was not recently broken.
+ bool allow_zero_rtt_;
Ryan Hamilton 2015/05/18 14:29:52 I'm not in love with this boolean combining two di
Bence 2015/05/18 15:17:54 Great idea, following the first suggestion. Thank
scoped_ptr<QuicServerInfo> server_info_;
bool started_another_job_;
const BoundNetLog net_log_;
@@ -211,7 +213,7 @@ QuicStreamFactory::Job::Job(QuicStreamFactory* factory,
HostResolver* host_resolver,
const HostPortPair& host_port_pair,
bool is_https,
- bool was_alternate_protocol_recently_broken,
+ bool allow_zero_rtt,
PrivacyMode privacy_mode,
bool is_post,
QuicServerInfo* server_info,
@@ -221,8 +223,7 @@ QuicStreamFactory::Job::Job(QuicStreamFactory* factory,
host_resolver_(host_resolver),
server_id_(host_port_pair, is_https, privacy_mode),
is_post_(is_post),
- was_alternate_protocol_recently_broken_(
- was_alternate_protocol_recently_broken),
+ allow_zero_rtt_(allow_zero_rtt),
server_info_(server_info),
started_another_job_(false),
net_log_(net_log),
@@ -238,10 +239,10 @@ QuicStreamFactory::Job::Job(QuicStreamFactory* factory,
factory_(factory),
host_resolver_(host_resolver), // unused
server_id_(server_id),
- is_post_(false), // unused
- was_alternate_protocol_recently_broken_(false), // unused
- started_another_job_(false), // unused
- net_log_(session->net_log()), // unused
+ is_post_(false), // unused
+ allow_zero_rtt_(true), // unused
+ started_another_job_(false), // unused
+ net_log_(session->net_log()), // unused
session_(session),
weak_factory_(this) {
}
@@ -437,8 +438,7 @@ int QuicStreamFactory::Job::DoConnect() {
return ERR_QUIC_PROTOCOL_ERROR;
}
bool require_confirmation =
- factory_->require_confirmation() || is_post_ ||
- was_alternate_protocol_recently_broken_;
+ factory_->require_confirmation() || is_post_ || !allow_zero_rtt_;
rv = session_->CryptoConnect(
require_confirmation,
@@ -485,14 +485,18 @@ QuicStreamRequest::~QuicStreamRequest() {
int QuicStreamRequest::Request(const HostPortPair& host_port_pair,
bool is_https,
PrivacyMode privacy_mode,
+ base::StringPiece origin_host,
base::StringPiece method,
const BoundNetLog& net_log,
const CompletionCallback& callback) {
DCHECK(!stream_);
DCHECK(callback_.is_null());
DCHECK(factory_);
- int rv = factory_->Create(host_port_pair, is_https, privacy_mode, method,
- net_log, this);
+ origin_host_.assign(origin_host.data(), origin_host.size());
Ryan Hamilton 2015/05/18 14:29:52 It looks like this is the only place that origin_h
Bence 2015/05/18 15:17:54 Oops. Done.
+ bool server_and_origin_have_same_host = host_port_pair.host() == origin_host;
+ int rv =
+ factory_->Create(host_port_pair, is_https, privacy_mode,
+ server_and_origin_have_same_host, method, net_log, this);
if (rv == ERR_IO_PENDING) {
host_port_pair_ = host_port_pair;
net_log_ = net_log;
@@ -615,9 +619,11 @@ void QuicStreamFactory::set_require_confirmation(bool require_confirmation) {
int QuicStreamFactory::Create(const HostPortPair& host_port_pair,
bool is_https,
PrivacyMode privacy_mode,
+ bool server_and_origin_have_same_host,
base::StringPiece method,
const BoundNetLog& net_log,
QuicStreamRequest* request) {
+ server_and_origin_have_same_host_ = server_and_origin_have_same_host;
QuicServerId server_id(host_port_pair, is_https, privacy_mode);
if (HasActiveSession(server_id)) {
request->set_stream(CreateIfSessionExists(server_id, net_log));
@@ -655,10 +661,10 @@ int QuicStreamFactory::Create(const HostPortPair& host_port_pair,
}
}
- scoped_ptr<Job> job(new Job(this, host_resolver_, host_port_pair, is_https,
- WasQuicRecentlyBroken(server_id), privacy_mode,
- method == "POST" /* is_post */, quic_server_info,
- net_log));
+ scoped_ptr<Job> job(new Job(
+ this, host_resolver_, host_port_pair, is_https,
+ server_and_origin_have_same_host && !WasQuicRecentlyBroken(server_id),
+ privacy_mode, method == "POST" /* is_post */, quic_server_info, net_log));
int rv = job->Run(base::Bind(&QuicStreamFactory::OnJobComplete,
base::Unretained(this), job.get()));
if (rv == ERR_IO_PENDING) {
@@ -677,9 +683,10 @@ int QuicStreamFactory::Create(const HostPortPair& host_port_pair,
void QuicStreamFactory::CreateAuxilaryJob(const QuicServerId server_id,
bool is_post,
const BoundNetLog& net_log) {
- Job* aux_job = new Job(this, host_resolver_, server_id.host_port_pair(),
- server_id.is_https(), WasQuicRecentlyBroken(server_id),
- server_id.privacy_mode(), is_post, nullptr, net_log);
+ Job* aux_job = new Job(
+ this, host_resolver_, server_id.host_port_pair(), server_id.is_https(),
+ server_and_origin_have_same_host_ && !WasQuicRecentlyBroken(server_id),
Ryan Hamilton 2015/05/18 14:29:52 It looks like this method is only called from the
Bence 2015/05/18 15:17:55 Great idea, thanks. Done.
+ server_id.privacy_mode(), is_post, nullptr, net_log);
active_jobs_[server_id].insert(aux_job);
task_runner_->PostTask(FROM_HERE,
base::Bind(&QuicStreamFactory::Job::RunAuxilaryJob,

Powered by Google App Engine
This is Rietveld 408576698