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

Unified Diff: net/quic/quic_stream_factory.cc

Issue 669813003: Update from chromium https://crrev.com/301725/ (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 6 years, 2 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
« no previous file with comments | « net/quic/quic_stream_factory.h ('k') | net/quic/quic_stream_factory_test.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/quic/quic_stream_factory.cc
diff --git a/net/quic/quic_stream_factory.cc b/net/quic/quic_stream_factory.cc
index 046c0a1fd4ce091ec3fd51f61e5e70294dca39e8..678463ea70be5b59e5753ecb7022f4cd2012e4b6 100644
--- a/net/quic/quic_stream_factory.cc
+++ b/net/quic/quic_stream_factory.cc
@@ -180,6 +180,8 @@ class QuicStreamFactory::Job {
void OnIOComplete(int rv);
+ void CancelWaitForDataReadyCallback();
+
CompletionCallback callback() {
return callback_;
}
@@ -309,6 +311,14 @@ void QuicStreamFactory::Job::OnIOComplete(int rv) {
}
}
+void QuicStreamFactory::Job::CancelWaitForDataReadyCallback() {
+ // If we are waiting for WaitForDataReadyCallback, then cancel the callback.
+ if (io_state_ != STATE_LOAD_SERVER_INFO_COMPLETE)
+ return;
+ server_info_->CancelWaitForDataReadyCallback();
+ OnIOComplete(OK);
+}
+
int QuicStreamFactory::Job::DoResolveHost() {
// Start loading the data now, and wait for it after we resolve the host.
if (server_info_) {
@@ -350,6 +360,17 @@ int QuicStreamFactory::Job::DoLoadServerInfo() {
if (!server_info_)
return OK;
+ // To mitigate the effects of disk cache taking too long to load QUIC server
+ // information, set up a timer to cancel WaitForDataReady's callback.
+ if (factory_->load_server_info_timeout_ms_ > 0) {
+ factory_->task_runner_->PostDelayedTask(
+ FROM_HERE,
+ base::Bind(&QuicStreamFactory::Job::CancelWaitForDataReadyCallback,
+ weak_factory_.GetWeakPtr()),
+ base::TimeDelta::FromMilliseconds(
+ factory_->load_server_info_timeout_ms_));
+ }
+
disk_cache_load_start_time_ = base::TimeTicks::Now();
return server_info_->WaitForDataReady(
base::Bind(&QuicStreamFactory::Job::OnIOComplete,
@@ -491,6 +512,7 @@ QuicStreamFactory::QuicStreamFactory(
bool enable_port_selection,
bool always_require_handshake_confirmation,
bool disable_connection_pooling,
+ int load_server_info_timeout,
const QuicTagVector& connection_options)
: require_confirmation_(true),
host_resolver_(host_resolver),
@@ -508,8 +530,10 @@ QuicStreamFactory::QuicStreamFactory(
always_require_handshake_confirmation_(
always_require_handshake_confirmation),
disable_connection_pooling_(disable_connection_pooling),
+ load_server_info_timeout_ms_(load_server_info_timeout),
port_seed_(random_generator_->RandUint64()),
check_persisted_supports_quic_(true),
+ task_runner_(nullptr),
weak_factory_(this) {
DCHECK(transport_security_state_);
crypto_config_.set_user_agent_id(user_agent_id);
@@ -574,6 +598,11 @@ int QuicStreamFactory::Create(const HostPortPair& host_port_pair,
quic_server_info = quic_server_info_factory_->GetForServer(server_id);
}
}
+ // TODO(rtenneti): Initialize task_runner_ in the constructor after
+ // WebRequestActionWithThreadsTest.* tests are fixed.
+ if (!task_runner_)
+ task_runner_ = base::MessageLoop::current()->message_loop_proxy().get();
+
bool was_alternate_protocol_recently_broken =
http_server_properties_ &&
http_server_properties_->WasAlternateProtocolRecentlyBroken(
« no previous file with comments | « net/quic/quic_stream_factory.h ('k') | net/quic/quic_stream_factory_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698