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 =