Commit b23d9998 authored by Renjie Tang's avatar Renjie Tang Committed by Commit Bot

Add an Finch experiment option to disable 0-RTT requests in gQUIC.

Netlogs can be found at: https://drive.google.com/drive/folders/1IuWYSGRKp_Dr160bEdBb9zQb47kxqOgW?usp=sharing
no_zero_rtt.json shows that the requests were only sent with 1-RTT keys.

The experiment forces requests to wait for 1-RTT handshake.

Change-Id: I5e1dab537a3d2f2b11199bae34e781e14b6885fd
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2363954
Commit-Queue: Renjie Tang <renjietang@chromium.org>
Reviewed-by: default avatarDavid Schinazi <dschinazi@chromium.org>
Cr-Commit-Position: refs/heads/master@{#799933}
parent a276ffb4
...@@ -357,6 +357,12 @@ bool ShouldQuicDisableTlsZeroRtt(const VariationParameters& quic_trial_params) { ...@@ -357,6 +357,12 @@ bool ShouldQuicDisableTlsZeroRtt(const VariationParameters& quic_trial_params) {
GetVariationParam(quic_trial_params, "disable_tls_zero_rtt"), "true"); GetVariationParam(quic_trial_params, "disable_tls_zero_rtt"), "true");
} }
bool ShouldQuicDisableGQuicZeroRtt(
const VariationParameters& quic_trial_params) {
return base::LowerCaseEqualsASCII(
GetVariationParam(quic_trial_params, "disable_gquic_zero_rtt"), "true");
}
int GetQuicRetransmittableOnWireTimeoutMilliseconds( int GetQuicRetransmittableOnWireTimeoutMilliseconds(
const VariationParameters& quic_trial_params) { const VariationParameters& quic_trial_params) {
int value; int value;
...@@ -543,6 +549,9 @@ void ConfigureQuicParams(base::StringPiece quic_trial_group, ...@@ -543,6 +549,9 @@ void ConfigureQuicParams(base::StringPiece quic_trial_group,
quic_params->disable_tls_zero_rtt = quic_params->disable_tls_zero_rtt =
ShouldQuicDisableTlsZeroRtt(quic_trial_params); ShouldQuicDisableTlsZeroRtt(quic_trial_params);
quic_params->disable_gquic_zero_rtt =
ShouldQuicDisableGQuicZeroRtt(quic_trial_params);
int retransmittable_on_wire_timeout_milliseconds = int retransmittable_on_wire_timeout_milliseconds =
GetQuicRetransmittableOnWireTimeoutMilliseconds(quic_trial_params); GetQuicRetransmittableOnWireTimeoutMilliseconds(quic_trial_params);
if (retransmittable_on_wire_timeout_milliseconds > 0) { if (retransmittable_on_wire_timeout_milliseconds > 0) {
......
...@@ -457,6 +457,18 @@ TEST_F(NetworkSessionConfiguratorTest, ...@@ -457,6 +457,18 @@ TEST_F(NetworkSessionConfiguratorTest,
EXPECT_TRUE(quic_params_.disable_tls_zero_rtt); EXPECT_TRUE(quic_params_.disable_tls_zero_rtt);
} }
TEST_F(NetworkSessionConfiguratorTest,
QuicDisableGQuicZeroRttFromFieldTrialParams) {
std::map<std::string, std::string> field_trial_params;
field_trial_params["disable_gquic_zero_rtt"] = "true";
variations::AssociateVariationParams("QUIC", "Enabled", field_trial_params);
base::FieldTrialList::CreateFieldTrial("QUIC", "Enabled");
ParseFieldTrials();
EXPECT_TRUE(quic_params_.disable_gquic_zero_rtt);
}
TEST_F(NetworkSessionConfiguratorTest, PacketLengthFromFieldTrialParams) { TEST_F(NetworkSessionConfiguratorTest, PacketLengthFromFieldTrialParams) {
std::map<std::string, std::string> field_trial_params; std::map<std::string, std::string> field_trial_params;
field_trial_params["max_packet_length"] = "1450"; field_trial_params["max_packet_length"] = "1450";
......
...@@ -503,6 +503,8 @@ int QuicChromiumClientSession::Handle::RequestStream( ...@@ -503,6 +503,8 @@ int QuicChromiumClientSession::Handle::RequestStream(
if (!session_) if (!session_)
return ERR_CONNECTION_CLOSED; return ERR_CONNECTION_CLOSED;
requires_confirmation |= session_->gquic_zero_rtt_disabled();
// std::make_unique does not work because the StreamRequest constructor // std::make_unique does not work because the StreamRequest constructor
// is private. // is private.
stream_request_ = base::WrapUnique( stream_request_ = base::WrapUnique(
...@@ -2981,6 +2983,12 @@ base::Value QuicChromiumClientSession::GetInfoAsValue( ...@@ -2981,6 +2983,12 @@ base::Value QuicChromiumClientSession::GetInfoAsValue(
return std::move(dict); return std::move(dict);
} }
bool QuicChromiumClientSession::gquic_zero_rtt_disabled() const {
if (!stream_factory_)
return false;
return stream_factory_->gquic_zero_rtt_disabled();
}
std::unique_ptr<QuicChromiumClientSession::Handle> std::unique_ptr<QuicChromiumClientSession::Handle>
QuicChromiumClientSession::CreateHandle(const HostPortPair& destination) { QuicChromiumClientSession::CreateHandle(const HostPortPair& destination) {
return std::make_unique<QuicChromiumClientSession::Handle>( return std::make_unique<QuicChromiumClientSession::Handle>(
......
...@@ -607,6 +607,9 @@ class NET_EXPORT_PRIVATE QuicChromiumClientSession ...@@ -607,6 +607,9 @@ class NET_EXPORT_PRIVATE QuicChromiumClientSession
const NetLogWithSource& net_log() const { return net_log_; } const NetLogWithSource& net_log() const { return net_log_; }
// Returns true if the stream factory disables gQUIC 0-RTT.
bool gquic_zero_rtt_disabled() const;
// Returns a Handle to this session. // Returns a Handle to this session.
std::unique_ptr<QuicChromiumClientSession::Handle> CreateHandle( std::unique_ptr<QuicChromiumClientSession::Handle> CreateHandle(
const HostPortPair& destination); const HostPortPair& destination);
......
...@@ -167,6 +167,8 @@ struct NET_EXPORT QuicParams { ...@@ -167,6 +167,8 @@ struct NET_EXPORT QuicParams {
base::TimeDelta initial_rtt_for_handshake; base::TimeDelta initial_rtt_for_handshake;
// If true, QUIC with TLS will not try 0-RTT connection. // If true, QUIC with TLS will not try 0-RTT connection.
bool disable_tls_zero_rtt = false; bool disable_tls_zero_rtt = false;
// If true, gQUIC requests will always require confirmation.
bool disable_gquic_zero_rtt = false;
}; };
// QuicContext contains QUIC-related variables that are shared across all of the // QuicContext contains QUIC-related variables that are shared across all of the
......
...@@ -344,6 +344,11 @@ class NET_EXPORT_PRIVATE QuicStreamFactory ...@@ -344,6 +344,11 @@ class NET_EXPORT_PRIVATE QuicStreamFactory
bool allow_server_migration() const { return params_.allow_server_migration; } bool allow_server_migration() const { return params_.allow_server_migration; }
// Returns true is gQUIC 0-RTT is disabled from quic_context.
bool gquic_zero_rtt_disabled() const {
return params_.disable_gquic_zero_rtt;
}
void set_is_quic_known_to_work_on_current_network( void set_is_quic_known_to_work_on_current_network(
bool is_quic_known_to_work_on_current_network); bool is_quic_known_to_work_on_current_network);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment