Commit a58c1b66 authored by Victor Vasiliev's avatar Victor Vasiliev Committed by Commit Bot

Always enable QUIC draft27 when speaking QuicTransport

QuicTransport requires TLS 1.3 and message frames, but the version of
QUIC we currently use by default does not support that.  Making the
version used by QuicTransport depend randomly on current experiment
config seems to be counterproductive for the purposes of origin trial,
so let's pick draft27 and use that for the duration of the trial.

Bug: 1084289

Change-Id: I7deb72e742692cf08c8922756109b48ce64ec9fa
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2208090
Commit-Queue: Victor Vasiliev <vasilvv@chromium.org>
Reviewed-by: default avatarZhongyi Shi <zhongyi@chromium.org>
Reviewed-by: default avatarDavid Schinazi <dschinazi@chromium.org>
Cr-Commit-Position: refs/heads/master@{#770052}
parent 3b636e32
...@@ -26,6 +26,9 @@ std::set<std::string> HostsFromOrigins(std::set<HostPortPair> origins) { ...@@ -26,6 +26,9 @@ std::set<std::string> HostsFromOrigins(std::set<HostPortPair> origins) {
} }
} // namespace } // namespace
constexpr quic::ParsedQuicVersion
QuicTransportClient::kQuicVersionForOriginTrial;
QuicTransportClient::QuicTransportClient( QuicTransportClient::QuicTransportClient(
const GURL& url, const GURL& url,
const url::Origin& origin, const url::Origin& origin,
...@@ -134,13 +137,16 @@ int QuicTransportClient::DoInit() { ...@@ -134,13 +137,16 @@ int QuicTransportClient::DoInit() {
// TODO(vasilvv): check if QUIC is disabled by policy. // TODO(vasilvv): check if QUIC is disabled by policy.
// Ensure that for the duration of the origin trial, a fixed QUIC transport
// version is available.
supported_versions_.push_back(kQuicVersionForOriginTrial);
// Add other supported versions if available.
for (quic::ParsedQuicVersion& version : for (quic::ParsedQuicVersion& version :
quic_context_->params()->supported_versions) { quic_context_->params()->supported_versions) {
// QuicTransport requires TLS-style ALPN. if (!quic::IsVersionValidForQuicTransport(version))
if (version.handshake_protocol != quic::PROTOCOL_TLS1_3)
continue;
if (!quic::VersionSupportsMessageFrames(version.transport_version))
continue; continue;
if (version == kQuicVersionForOriginTrial)
continue; // Skip as we've already added it above.
supported_versions_.push_back(version); supported_versions_.push_back(version);
} }
if (supported_versions_.empty()) { if (supported_versions_.empty()) {
......
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
#include "net/socket/client_socket_factory.h" #include "net/socket/client_socket_factory.h"
#include "net/third_party/quiche/src/quic/core/crypto/quic_crypto_client_config.h" #include "net/third_party/quiche/src/quic/core/crypto/quic_crypto_client_config.h"
#include "net/third_party/quiche/src/quic/core/quic_config.h" #include "net/third_party/quiche/src/quic/core/quic_config.h"
#include "net/third_party/quiche/src/quic/core/quic_versions.h"
#include "net/third_party/quiche/src/quic/quic_transport/quic_transport_client_session.h" #include "net/third_party/quiche/src/quic/quic_transport/quic_transport_client_session.h"
#include "url/gurl.h" #include "url/gurl.h"
#include "url/origin.h" #include "url/origin.h"
...@@ -74,6 +75,11 @@ class NET_EXPORT QuicTransportClient ...@@ -74,6 +75,11 @@ class NET_EXPORT QuicTransportClient
virtual void OnCanCreateNewOutgoingUnidirectionalStream() = 0; virtual void OnCanCreateNewOutgoingUnidirectionalStream() = 0;
}; };
// QUIC protocol version that is used in the origin trial.
static constexpr quic::ParsedQuicVersion kQuicVersionForOriginTrial =
quic::ParsedQuicVersion(quic::PROTOCOL_TLS1_3,
quic::QUIC_VERSION_IETF_DRAFT_27);
// |visitor| and |context| must outlive this object. // |visitor| and |context| must outlive this object.
QuicTransportClient(const GURL& url, QuicTransportClient(const GURL& url,
const url::Origin& origin, const url::Origin& origin,
......
...@@ -40,7 +40,7 @@ class MockVisitor : public QuicTransportClient::Visitor { ...@@ -40,7 +40,7 @@ class MockVisitor : public QuicTransportClient::Visitor {
class QuicTransportEndToEndTest : public TestWithTaskEnvironment { class QuicTransportEndToEndTest : public TestWithTaskEnvironment {
public: public:
QuicTransportEndToEndTest() { QuicTransportEndToEndTest() {
quic::QuicEnableVersion(quic::DefaultVersionForQuicTransport()); quic::QuicEnableVersion(QuicTransportClient::kQuicVersionForOriginTrial);
origin_ = url::Origin::Create(GURL{"https://example.org"}); origin_ = url::Origin::Create(GURL{"https://example.org"});
isolation_key_ = NetworkIsolationKey(origin_, origin_); isolation_key_ = NetworkIsolationKey(origin_, origin_);
...@@ -57,8 +57,7 @@ class QuicTransportEndToEndTest : public TestWithTaskEnvironment { ...@@ -57,8 +57,7 @@ class QuicTransportEndToEndTest : public TestWithTaskEnvironment {
builder.set_host_resolver(std::move(host_resolver)); builder.set_host_resolver(std::move(host_resolver));
auto quic_context = std::make_unique<QuicContext>(); auto quic_context = std::make_unique<QuicContext>();
quic_context->params()->supported_versions.push_back( quic_context->params()->supported_versions.clear();
quic::DefaultVersionForQuicTransport());
// This is required to bypass the check that only allows known certificate // This is required to bypass the check that only allows known certificate
// roots in QUIC. // roots in QUIC.
quic_context->params()->origins_to_force_quic_on.insert( quic_context->params()->origins_to_force_quic_on.insert(
......
...@@ -33,6 +33,17 @@ constexpr size_t kMaxReadsPerEvent = 32; ...@@ -33,6 +33,17 @@ constexpr size_t kMaxReadsPerEvent = 32;
constexpr size_t kMaxNewConnectionsPerEvent = 32; constexpr size_t kMaxNewConnectionsPerEvent = 32;
constexpr int kReadBufferSize = 2 * quic::kMaxIncomingPacketSize; constexpr int kReadBufferSize = 2 * quic::kMaxIncomingPacketSize;
// TODO(vasilvv): move this into the shared code.
quic::ParsedQuicVersionVector AllVersionsValidForQuicTransport() {
quic::ParsedQuicVersionVector result;
for (quic::ParsedQuicVersion version : quic::AllSupportedVersions()) {
if (!quic::IsVersionValidForQuicTransport(version))
continue;
result.push_back(version);
}
return result;
}
} // namespace } // namespace
class QuicTransportSimpleServerSessionHelper class QuicTransportSimpleServerSessionHelper
...@@ -52,7 +63,7 @@ QuicTransportSimpleServer::QuicTransportSimpleServer( ...@@ -52,7 +63,7 @@ QuicTransportSimpleServer::QuicTransportSimpleServer(
std::vector<url::Origin> accepted_origins, std::vector<url::Origin> accepted_origins,
std::unique_ptr<quic::ProofSource> proof_source) std::unique_ptr<quic::ProofSource> proof_source)
: port_(port), : port_(port),
version_manager_({quic::DefaultVersionForQuicTransport()}), version_manager_(AllVersionsValidForQuicTransport()),
clock_(QuicChromiumClock::GetInstance()), clock_(QuicChromiumClock::GetInstance()),
crypto_config_(kSourceAddressTokenSecret, crypto_config_(kSourceAddressTokenSecret,
quic::QuicRandom::GetInstance(), quic::QuicRandom::GetInstance(),
......
...@@ -4,5 +4,5 @@ Instantiate QuicTransport. ...@@ -4,5 +4,5 @@ Instantiate QuicTransport.
Log.onEntryAdded Log.onEntryAdded
source: network source: network
level: error level: error
text: Failed to establish a connection to quic-transport://localhost/: net::ERR_NOT_IMPLEMENTED. text: Failed to establish a connection to quic-transport://localhost/: [net error].
...@@ -8,10 +8,12 @@ ...@@ -8,10 +8,12 @@
dp.Log.onEntryAdded(event => { dp.Log.onEntryAdded(event => {
const entry = event.params.entry; const entry = event.params.entry;
// Remove the error code, as it is platform-specific and can change.
const text = entry.text.replace(/net::ERR_[A-Z_]+/, '[net error]');
testRunner.log('Log.onEntryAdded'); testRunner.log('Log.onEntryAdded');
testRunner.log(`source: ${entry.source}`); testRunner.log(`source: ${entry.source}`);
testRunner.log(`level: ${entry.level}`); testRunner.log(`level: ${entry.level}`);
testRunner.log(`text: ${entry.text}`); testRunner.log(`text: ${text}`);
testRunner.completeTest(); testRunner.completeTest();
}); });
......
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