Automated g4 rollback of changelist 251711909.
*** Reason for rollback ***
For a clean rollback of cl/250877268 which cause 20181010 QUIC b3m prober failure.
*** Original change description ***
gfe-relnote: Deprecate gfe2_reloadable_flag_quic_enable_version_46 .
***
PiperOrigin-RevId: 251871707
Change-Id: I2e3ef451bda2c2b3f3dc5353d6eb0b5f50943fe1
diff --git a/quic/core/quic_dispatcher_test.cc b/quic/core/quic_dispatcher_test.cc
index 517b892..188707b 100644
--- a/quic/core/quic_dispatcher_test.cc
+++ b/quic/core/quic_dispatcher_test.cc
@@ -877,6 +877,7 @@
static_assert(QUIC_ARRAYSIZE(kSupportedTransportVersions) == 5u,
"Supported versions out of sync");
SetQuicReloadableFlag(quic_disable_version_39, false);
+ SetQuicReloadableFlag(quic_enable_version_46, true);
SetQuicReloadableFlag(quic_enable_version_47, true);
SetQuicReloadableFlag(quic_enable_version_99, true);
QuicSocketAddress client_address(QuicIpAddress::Loopback4(), 1);
@@ -961,6 +962,39 @@
SerializeCHLO(), CONNECTION_ID_PRESENT,
PACKET_4BYTE_PACKET_NUMBER, 1);
+ // Turn off version 46.
+ SetQuicReloadableFlag(quic_enable_version_46, false);
+ connection_id = TestConnectionId(++conn_id);
+ EXPECT_CALL(*dispatcher_, CreateQuicSession(connection_id, client_address,
+ QuicStringPiece("hq"), _))
+ .Times(0);
+ ProcessPacket(client_address, connection_id, true,
+ ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_46),
+ SerializeCHLO(), CONNECTION_ID_PRESENT,
+ PACKET_4BYTE_PACKET_NUMBER, 1);
+
+ // Turn on version 46.
+ SetQuicReloadableFlag(quic_enable_version_46, true);
+ connection_id = TestConnectionId(++conn_id);
+ EXPECT_CALL(*dispatcher_, CreateQuicSession(connection_id, client_address,
+ QuicStringPiece("hq"), _))
+ .WillOnce(testing::Return(CreateSession(
+ dispatcher_.get(), config_, connection_id, client_address,
+ &mock_helper_, &mock_alarm_factory_, &crypto_config_,
+ QuicDispatcherPeer::GetCache(dispatcher_.get()), &session1_)));
+ EXPECT_CALL(*reinterpret_cast<MockQuicConnection*>(session1_->connection()),
+ ProcessUdpPacket(_, _, _))
+ .WillOnce(WithArg<2>(
+ Invoke([this, connection_id](const QuicEncryptedPacket& packet) {
+ ValidatePacket(connection_id, packet);
+ })));
+ EXPECT_CALL(*dispatcher_,
+ ShouldCreateOrBufferPacketForConnection(connection_id, _));
+ ProcessPacket(client_address, connection_id, true,
+ ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_46),
+ SerializeCHLO(), CONNECTION_ID_PRESENT,
+ PACKET_4BYTE_PACKET_NUMBER, 1);
+
// Turn off version 39.
SetQuicReloadableFlag(quic_disable_version_39, true);
connection_id = TestConnectionId(++conn_id);
diff --git a/quic/core/quic_version_manager.cc b/quic/core/quic_version_manager.cc
index 045e38c..cde3664 100644
--- a/quic/core/quic_version_manager.cc
+++ b/quic/core/quic_version_manager.cc
@@ -16,6 +16,7 @@
ParsedQuicVersionVector supported_versions)
: enable_version_99_(GetQuicReloadableFlag(quic_enable_version_99)),
enable_version_47_(GetQuicReloadableFlag(quic_enable_version_47)),
+ enable_version_46_(GetQuicReloadableFlag(quic_enable_version_46)),
disable_version_39_(GetQuicReloadableFlag(quic_disable_version_39)),
enable_tls_(GetQuicFlag(FLAGS_quic_supports_tls_handshake)),
allowed_supported_versions_(std::move(supported_versions)) {
@@ -38,10 +39,12 @@
void QuicVersionManager::MaybeRefilterSupportedVersions() {
if (enable_version_99_ != GetQuicReloadableFlag(quic_enable_version_99) ||
enable_version_47_ != GetQuicReloadableFlag(quic_enable_version_47) ||
+ enable_version_46_ != GetQuicReloadableFlag(quic_enable_version_46) ||
disable_version_39_ != GetQuicReloadableFlag(quic_disable_version_39) ||
enable_tls_ != GetQuicFlag(FLAGS_quic_supports_tls_handshake)) {
enable_version_99_ = GetQuicReloadableFlag(quic_enable_version_99);
enable_version_47_ = GetQuicReloadableFlag(quic_enable_version_47);
+ enable_version_46_ = GetQuicReloadableFlag(quic_enable_version_46);
disable_version_39_ = GetQuicReloadableFlag(quic_disable_version_39);
enable_tls_ = GetQuicFlag(FLAGS_quic_supports_tls_handshake);
RefilterSupportedVersions();
diff --git a/quic/core/quic_version_manager.h b/quic/core/quic_version_manager.h
index 71a285a..a865be6 100644
--- a/quic/core/quic_version_manager.h
+++ b/quic/core/quic_version_manager.h
@@ -42,6 +42,8 @@
bool enable_version_99_;
// quic_enable_version_47 flag
bool enable_version_47_;
+ // quic_enable_version_46 flag
+ bool enable_version_46_;
// quic_disable_version_39 flag
bool disable_version_39_;
// quic_supports_tls_handshake flag
diff --git a/quic/core/quic_version_manager_test.cc b/quic/core/quic_version_manager_test.cc
index 4e4b3f4..de5af3b 100644
--- a/quic/core/quic_version_manager_test.cc
+++ b/quic/core/quic_version_manager_test.cc
@@ -20,16 +20,21 @@
"Supported versions out of sync");
SetQuicReloadableFlag(quic_enable_version_99, false);
SetQuicReloadableFlag(quic_enable_version_47, false);
+ SetQuicReloadableFlag(quic_enable_version_46, false);
SetQuicReloadableFlag(quic_disable_version_39, true);
QuicVersionManager manager(AllSupportedVersions());
EXPECT_EQ(FilterSupportedTransportVersions(AllSupportedTransportVersions()),
manager.GetSupportedTransportVersions());
- EXPECT_EQ(QuicTransportVersionVector({QUIC_VERSION_46, QUIC_VERSION_43}),
+ EXPECT_EQ(QuicTransportVersionVector({QUIC_VERSION_43}),
manager.GetSupportedTransportVersions());
SetQuicReloadableFlag(quic_disable_version_39, false);
+ EXPECT_EQ(QuicTransportVersionVector({QUIC_VERSION_43, QUIC_VERSION_39}),
+ manager.GetSupportedTransportVersions());
+
+ SetQuicReloadableFlag(quic_enable_version_46, true);
EXPECT_EQ(QuicTransportVersionVector(
{QUIC_VERSION_46, QUIC_VERSION_43, QUIC_VERSION_39}),
manager.GetSupportedTransportVersions());
diff --git a/quic/core/quic_versions.cc b/quic/core/quic_versions.cc
index 960a046..d540def 100644
--- a/quic/core/quic_versions.cc
+++ b/quic/core/quic_versions.cc
@@ -228,11 +228,17 @@
}
if (version.transport_version == QUIC_VERSION_99) {
if (GetQuicReloadableFlag(quic_enable_version_99) &&
- GetQuicReloadableFlag(quic_enable_version_47)) {
+ GetQuicReloadableFlag(quic_enable_version_47) &&
+ GetQuicReloadableFlag(quic_enable_version_46)) {
filtered_versions.push_back(version);
}
} else if (version.transport_version == QUIC_VERSION_47) {
- if (GetQuicReloadableFlag(quic_enable_version_47)) {
+ if (GetQuicReloadableFlag(quic_enable_version_47) &&
+ GetQuicReloadableFlag(quic_enable_version_46)) {
+ filtered_versions.push_back(version);
+ }
+ } else if (version.transport_version == QUIC_VERSION_46) {
+ if (GetQuicReloadableFlag(quic_enable_version_46)) {
filtered_versions.push_back(version);
}
} else if (version.transport_version == QUIC_VERSION_39) {
@@ -439,6 +445,9 @@
if (parsed_version.transport_version >= QUIC_VERSION_47) {
SetQuicReloadableFlag(quic_enable_version_47, true);
}
+ if (parsed_version.transport_version >= QUIC_VERSION_46) {
+ SetQuicReloadableFlag(quic_enable_version_46, true);
+ }
}
#undef RETURN_STRING_LITERAL // undef for jumbo builds
diff --git a/quic/core/quic_versions_test.cc b/quic/core/quic_versions_test.cc
index 0dbc72b..0b719d5 100644
--- a/quic/core/quic_versions_test.cc
+++ b/quic/core/quic_versions_test.cc
@@ -268,6 +268,7 @@
TEST_F(QuicVersionsTest, FilterSupportedTransportVersionsAllVersions) {
QuicTransportVersionVector all_versions = AllSupportedTransportVersions();
SetQuicReloadableFlag(quic_disable_version_39, false);
+ SetQuicReloadableFlag(quic_enable_version_46, true);
SetQuicReloadableFlag(quic_enable_version_47, true);
SetQuicReloadableFlag(quic_enable_version_99, true);
ParsedQuicVersionVector parsed_versions;
@@ -290,6 +291,7 @@
TEST_F(QuicVersionsTest, FilterSupportedTransportVersionsNo99) {
QuicTransportVersionVector all_versions = AllSupportedTransportVersions();
SetQuicReloadableFlag(quic_disable_version_39, false);
+ SetQuicReloadableFlag(quic_enable_version_46, true);
SetQuicReloadableFlag(quic_enable_version_47, true);
SetQuicReloadableFlag(quic_enable_version_99, false);
ParsedQuicVersionVector parsed_versions;
@@ -311,6 +313,7 @@
TEST_F(QuicVersionsTest, FilterSupportedTransportVersionsNo47) {
QuicTransportVersionVector all_versions = AllSupportedTransportVersions();
SetQuicReloadableFlag(quic_disable_version_39, false);
+ SetQuicReloadableFlag(quic_enable_version_46, true);
SetQuicReloadableFlag(quic_enable_version_47, false);
SetQuicReloadableFlag(quic_enable_version_99, false);
ParsedQuicVersionVector parsed_versions;
@@ -329,17 +332,39 @@
ASSERT_EQ(expected_parsed_versions, FilterSupportedVersions(parsed_versions));
}
-TEST_F(QuicVersionsTest, FilterSupportedTransportVersionsNo39) {
+TEST_F(QuicVersionsTest, FilterSupportedTransportVersionsNo46) {
QuicTransportVersionVector all_versions = AllSupportedTransportVersions();
- SetQuicReloadableFlag(quic_disable_version_39, true);
+ SetQuicReloadableFlag(quic_disable_version_39, false);
+ SetQuicReloadableFlag(quic_enable_version_46, false);
SetQuicReloadableFlag(quic_enable_version_47, false);
SetQuicReloadableFlag(quic_enable_version_99, false);
ParsedQuicVersionVector parsed_versions;
for (QuicTransportVersion version : all_versions) {
parsed_versions.push_back(ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, version));
}
- QuicTransportVersionVector expected_versions = {QUIC_VERSION_46,
- QUIC_VERSION_43};
+ QuicTransportVersionVector expected_versions = {QUIC_VERSION_43,
+ QUIC_VERSION_39};
+ ParsedQuicVersionVector expected_parsed_versions;
+ for (QuicTransportVersion version : expected_versions) {
+ expected_parsed_versions.push_back(
+ ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, version));
+ }
+
+ ASSERT_EQ(expected_versions, FilterSupportedTransportVersions(all_versions));
+ ASSERT_EQ(expected_parsed_versions, FilterSupportedVersions(parsed_versions));
+}
+
+TEST_F(QuicVersionsTest, FilterSupportedTransportVersionsNo39) {
+ QuicTransportVersionVector all_versions = AllSupportedTransportVersions();
+ SetQuicReloadableFlag(quic_disable_version_39, true);
+ SetQuicReloadableFlag(quic_enable_version_46, false);
+ SetQuicReloadableFlag(quic_enable_version_47, false);
+ SetQuicReloadableFlag(quic_enable_version_99, false);
+ ParsedQuicVersionVector parsed_versions;
+ for (QuicTransportVersion version : all_versions) {
+ parsed_versions.push_back(ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, version));
+ }
+ QuicTransportVersionVector expected_versions = {QUIC_VERSION_43};
ParsedQuicVersionVector expected_parsed_versions;
for (QuicTransportVersion version : expected_versions) {
expected_parsed_versions.push_back(
@@ -446,6 +471,7 @@
ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_99);
SetQuicFlag(FLAGS_quic_supports_tls_handshake, false);
SetQuicReloadableFlag(quic_disable_version_39, false);
+ SetQuicReloadableFlag(quic_enable_version_46, true);
SetQuicReloadableFlag(quic_enable_version_47, false);
SetQuicReloadableFlag(quic_enable_version_99, false);
diff --git a/quic/quartc/quartc_endpoint_test.cc b/quic/quartc/quartc_endpoint_test.cc
index 6b56b1a..5f8c25d 100644
--- a/quic/quartc/quartc_endpoint_test.cc
+++ b/quic/quartc/quartc_endpoint_test.cc
@@ -80,6 +80,11 @@
// attempts to connect using a newer version.
TEST_F(QuartcEndpointTest,
QUIC_TEST_DISABLED_IN_CHROME(ServerNegotiatesForOldVersion)) {
+ // Note: for this test, we need support for two versions. Which two shouldn't
+ // matter, but they must be enabled so that the version manager doesn't filter
+ // them out.
+ SetQuicReloadableFlag(quic_enable_version_46, true);
+
// Reset the client endpoint to prefer version 46 but also be capable of
// speaking version 43.
ParsedQuicVersionVector client_versions;
@@ -121,6 +126,11 @@
// QUIC versions.
TEST_F(QuartcEndpointTest,
QUIC_TEST_DISABLED_IN_CHROME(ServerAcceptsOldVersion)) {
+ // Note: for this test, we need support for two versions. Which two shouldn't
+ // matter, but they must be enabled so that the version manager doesn't filter
+ // them out.
+ SetQuicReloadableFlag(quic_enable_version_46, true);
+
// Reset the client endpoint to only speak version 43.
ParsedQuicVersionVector client_versions;
client_versions.push_back({PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_43});
@@ -162,6 +172,11 @@
// completely disjoint sets of versions.
TEST_F(QuartcEndpointTest,
QUIC_TEST_DISABLED_IN_CHROME(VersionNegotiationWithDisjointVersions)) {
+ // Note: for this test, we need support for two versions. Which two shouldn't
+ // matter, but they must be enabled so that the version manager doesn't filter
+ // them out.
+ SetQuicReloadableFlag(quic_enable_version_46, true);
+
// Reset the client endpoint to only speak version 43.
ParsedQuicVersionVector client_versions;
client_versions.push_back({PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_43});
@@ -204,6 +219,11 @@
// version negotiation fails.
SetQuicReloadableFlag(quic_no_client_conn_ver_negotiation, true);
+ // Note: for this test, we need support for two versions. Which two shouldn't
+ // matter, but they must be enabled so that the version manager doesn't filter
+ // them out.
+ SetQuicReloadableFlag(quic_enable_version_46, true);
+
// Reset the client endpoint to prefer version 46 but also be capable of
// speaking version 43.
ParsedQuicVersionVector client_versions;
diff --git a/quic/quartc/quartc_factory.cc b/quic/quartc/quartc_factory.cc
index 4e86fed..b75244c 100644
--- a/quic/quartc/quartc_factory.cc
+++ b/quic/quartc/quartc_factory.cc
@@ -62,6 +62,9 @@
// Fix b/110259444.
SetQuicReloadableFlag(quic_fix_spurious_ack_alarm, true);
+ // Enable version 46 to enable SendMessage API and 'quic bit' per draft 17.
+ SetQuicReloadableFlag(quic_enable_version_46, true);
+
// Enable version 47 to enable variable-length connection ids.
SetQuicReloadableFlag(quic_enable_version_47, true);
@@ -96,6 +99,12 @@
// settings doesn't seem preferable.
ConfigureGlobalQuicSettings();
+ // In exoblaze this may return false. DCHECK to avoid problems caused by
+ // incorrect flags configuration.
+ DCHECK(GetQuicReloadableFlag(quic_enable_version_46))
+ << "Your build does not support quic reloadable flags and shouldn't "
+ "place Quartc calls";
+
QuicTagVector copt;
copt.push_back(kNSTP);