Use a single global constant priority for proxy tunnels over H2/QUIC.
Previously, we'd use the priority of the first request to use a tunnel
for the entire tunnel, as long as the tunnel existed. This could result
in a HIGHEST priority tunnel later being used solely for low priority
requests, for vice versa. This CL just uses a default priority for all
proxy tunnels.
We could reprioritize tunnels according to the highest priority request
using them at any time. This might give better real-world performance,
but it leaks more metadata to proxies.
Bug: 898526 (940848 gets honorable mention)
Change-Id: If140af0213f93673c7e0f9490f6d7e4d9f81978f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1525174
Reviewed-by: Ryan Hamilton <[email protected]>
Commit-Queue: Matt Menke <[email protected]>
Cr-Commit-Position: refs/heads/master@{#641668}
diff --git a/net/quic/quic_network_transaction_unittest.cc b/net/quic/quic_network_transaction_unittest.cc
index a9a38c4..43ea8acb 100644
--- a/net/quic/quic_network_transaction_unittest.cc
+++ b/net/quic/quic_network_transaction_unittest.cc
@@ -30,6 +30,7 @@
#include "net/http/http_auth_handler_factory.h"
#include "net/http/http_network_session.h"
#include "net/http/http_network_transaction.h"
+#include "net/http/http_proxy_connect_job.h"
#include "net/http/http_server_properties_impl.h"
#include "net/http/http_stream.h"
#include "net/http/http_stream_factory.h"
@@ -7421,7 +7422,8 @@
mock_quic_data.AddWrite(
SYNCHRONOUS, ConstructClientRequestHeadersPacket(
2, GetNthClientInitiatedBidirectionalStreamId(0), true,
- false, ConnectRequestHeaders("mail.example.org:443"),
+ false, HttpProxyConnectJob::kH2QuicTunnelPriority,
+ ConnectRequestHeaders("mail.example.org:443"), 0,
&header_stream_offset));
mock_quic_data.AddRead(
ASYNC, ConstructServerResponseHeadersPacket(
@@ -7513,7 +7515,8 @@
mock_quic_data.AddWrite(
SYNCHRONOUS, ConstructClientRequestHeadersPacket(
2, GetNthClientInitiatedBidirectionalStreamId(0), true,
- false, ConnectRequestHeaders("mail.example.org:443"),
+ false, HttpProxyConnectJob::kH2QuicTunnelPriority,
+ ConnectRequestHeaders("mail.example.org:443"), 0,
&header_stream_offset));
mock_quic_data.AddRead(
ASYNC, ConstructServerResponseHeadersPacket(
@@ -7615,7 +7618,8 @@
SYNCHRONOUS,
ConstructClientRequestHeadersPacket(
write_packet_index++, GetNthClientInitiatedBidirectionalStreamId(0),
- true, false, ConnectRequestHeaders("mail.example.org:443"),
+ true, false, HttpProxyConnectJob::kH2QuicTunnelPriority,
+ ConnectRequestHeaders("mail.example.org:443"), 0,
&header_stream_offset));
mock_quic_data.AddRead(
ASYNC, ConstructServerResponseHeadersPacket(
@@ -7779,7 +7783,8 @@
mock_quic_data.AddWrite(
SYNCHRONOUS, ConstructClientRequestHeadersPacket(
2, GetNthClientInitiatedBidirectionalStreamId(0), true,
- false, ConnectRequestHeaders("mail.example.org:443"),
+ false, HttpProxyConnectJob::kH2QuicTunnelPriority,
+ ConnectRequestHeaders("mail.example.org:443"), 0,
&client_header_stream_offset));
mock_quic_data.AddRead(
ASYNC, ConstructServerResponseHeadersPacket(
@@ -7824,12 +7829,12 @@
// CONNECT request and response for second request
mock_quic_data.AddWrite(
- SYNCHRONOUS,
- ConstructClientRequestHeadersPacket(
- 5, GetNthClientInitiatedBidirectionalStreamId(1), false, false,
- ConnectRequestHeaders("different.example.org:443"),
- GetNthClientInitiatedBidirectionalStreamId(0),
- &client_header_stream_offset));
+ SYNCHRONOUS, ConstructClientRequestHeadersPacket(
+ 5, GetNthClientInitiatedBidirectionalStreamId(1), false,
+ false, HttpProxyConnectJob::kH2QuicTunnelPriority,
+ ConnectRequestHeaders("different.example.org:443"),
+ GetNthClientInitiatedBidirectionalStreamId(0),
+ &client_header_stream_offset));
mock_quic_data.AddRead(
ASYNC, ConstructServerResponseHeadersPacket(
4, GetNthClientInitiatedBidirectionalStreamId(1), false, false,
@@ -7947,7 +7952,8 @@
mock_quic_data.AddWrite(
SYNCHRONOUS, ConstructClientRequestHeadersPacket(
2, GetNthClientInitiatedBidirectionalStreamId(0), true,
- false, ConnectRequestHeaders("mail.example.org:443"),
+ false, HttpProxyConnectJob::kH2QuicTunnelPriority,
+ ConnectRequestHeaders("mail.example.org:443"), 0,
&header_stream_offset));
mock_quic_data.AddRead(
ASYNC, ConstructServerResponseHeadersPacket(
@@ -7995,7 +8001,8 @@
mock_quic_data.AddWrite(
SYNCHRONOUS, ConstructClientRequestHeadersPacket(
2, GetNthClientInitiatedBidirectionalStreamId(0), true,
- false, ConnectRequestHeaders("mail.example.org:443"),
+ false, HttpProxyConnectJob::kH2QuicTunnelPriority,
+ ConnectRequestHeaders("mail.example.org:443"), 0,
&header_stream_offset));
mock_quic_data.AddRead(ASYNC, ERR_CONNECTION_FAILED);
@@ -8034,7 +8041,8 @@
mock_quic_data.AddWrite(
SYNCHRONOUS, ConstructClientRequestHeadersPacket(
2, GetNthClientInitiatedBidirectionalStreamId(0), true,
- false, ConnectRequestHeaders("mail.example.org:443"),
+ false, HttpProxyConnectJob::kH2QuicTunnelPriority,
+ ConnectRequestHeaders("mail.example.org:443"), 0,
&client_header_stream_offset));
mock_quic_data.AddRead(
ASYNC, ConstructServerResponseHeadersPacket(
@@ -8048,7 +8056,8 @@
mock_quic_data.AddWrite(
SYNCHRONOUS, ConstructClientRequestHeadersPacket(
4, GetNthClientInitiatedBidirectionalStreamId(1), false,
- false, ConnectRequestHeaders("mail.example.org:443"),
+ false, HttpProxyConnectJob::kH2QuicTunnelPriority,
+ ConnectRequestHeaders("mail.example.org:443"),
GetNthClientInitiatedBidirectionalStreamId(0),
&client_header_stream_offset));
mock_quic_data.AddRead(
@@ -8158,7 +8167,8 @@
mock_quic_data.AddWrite(
SYNCHRONOUS, ConstructClientRequestHeadersPacket(
2, GetNthClientInitiatedBidirectionalStreamId(0), true,
- false, std::move(headers), &header_stream_offset));
+ false, HttpProxyConnectJob::kH2QuicTunnelPriority,
+ std::move(headers), 0, &header_stream_offset));
// Return an error, so the transaction stops here (this test isn't interested
// in the rest).
mock_quic_data.AddRead(ASYNC, ERR_CONNECTION_FAILED);
@@ -8202,11 +8212,11 @@
mock_quic_data.AddWrite(
SYNCHRONOUS, ConstructInitialSettingsPacket(1, &header_stream_offset));
mock_quic_data.AddWrite(
- SYNCHRONOUS,
- ConstructClientRequestHeadersPacket(
- 2, GetNthClientInitiatedBidirectionalStreamId(0), true, false,
- request_priority, ConnectRequestHeaders("mail.example.org:443"), 0,
- &header_stream_offset));
+ SYNCHRONOUS, ConstructClientRequestHeadersPacket(
+ 2, GetNthClientInitiatedBidirectionalStreamId(0), true,
+ false, HttpProxyConnectJob::kH2QuicTunnelPriority,
+ ConnectRequestHeaders("mail.example.org:443"), 0,
+ &header_stream_offset));
// Return an error, so the transaction stops here (this test isn't interested
// in the rest).
mock_quic_data.AddRead(ASYNC, ERR_CONNECTION_FAILED);
@@ -8297,8 +8307,6 @@
TEST_P(QuicNetworkTransactionTest, QuicProxyAuth) {
const base::string16 kBaz(base::ASCIIToUTF16("baz"));
const base::string16 kFoo(base::ASCIIToUTF16("foo"));
- const spdy::SpdyPriority default_priority =
- ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY);
std::unique_ptr<QuicTestPacketMaker> client_maker;
std::unique_ptr<QuicTestPacketMaker> server_maker;
@@ -8335,7 +8343,8 @@
SYNCHRONOUS,
client_maker->MakeRequestHeadersPacketWithOffsetTracking(
2, GetNthClientInitiatedBidirectionalStreamId(0), true, false,
- default_priority,
+ ConvertRequestPriorityToQuicPriority(
+ HttpProxyConnectJob::kH2QuicTunnelPriority),
client_maker->ConnectRequestHeaders("mail.example.org:443"), 0,
&client_header_stream_offset));
@@ -8374,11 +8383,13 @@
headers = client_maker->ConnectRequestHeaders("mail.example.org:443");
headers["proxy-authorization"] = "Basic Zm9vOmJheg==";
mock_quic_data.AddWrite(
- SYNCHRONOUS, client_maker->MakeRequestHeadersPacketWithOffsetTracking(
- 5, GetNthClientInitiatedBidirectionalStreamId(1),
- false, false, default_priority, std::move(headers),
- GetNthClientInitiatedBidirectionalStreamId(0),
- &client_header_stream_offset));
+ SYNCHRONOUS,
+ client_maker->MakeRequestHeadersPacketWithOffsetTracking(
+ 5, GetNthClientInitiatedBidirectionalStreamId(1), false, false,
+ ConvertRequestPriorityToQuicPriority(
+ HttpProxyConnectJob::kH2QuicTunnelPriority),
+ std::move(headers), GetNthClientInitiatedBidirectionalStreamId(0),
+ &client_header_stream_offset));
// Response to wrong password
headers =