xref: /aosp_15_r20/external/cronet/net/quic/quic_session_pool_job.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright 2024 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "net/quic/quic_session_pool_job.h"
6 
7 #include "base/memory/weak_ptr.h"
8 #include "net/base/completion_once_callback.h"
9 #include "net/base/network_change_notifier.h"
10 #include "net/base/network_handle.h"
11 #include "net/base/proxy_chain.h"
12 #include "net/base/request_priority.h"
13 #include "net/base/trace_constants.h"
14 #include "net/base/tracing.h"
15 #include "net/dns/host_resolver.h"
16 #include "net/log/net_log_with_source.h"
17 #include "net/quic/address_utils.h"
18 #include "net/quic/quic_crypto_client_config_handle.h"
19 #include "net/quic/quic_http_stream.h"
20 #include "net/quic/quic_session_pool.h"
21 #include "net/third_party/quiche/src/quiche/quic/core/quic_versions.h"
22 
23 namespace net {
24 
25 namespace {
26 
NetLogQuicSessionPoolJobParams(const QuicSessionPool::QuicSessionAliasKey * key)27 base::Value::Dict NetLogQuicSessionPoolJobParams(
28     const QuicSessionPool::QuicSessionAliasKey* key) {
29   const ProxyChain& proxy_chain = key->session_key().proxy_chain();
30   return base::Value::Dict()
31       .Set("host", key->server_id().host())
32       .Set("port", key->server_id().port())
33       .Set("privacy_mode",
34            PrivacyModeToDebugString(key->session_key().privacy_mode()))
35       .Set("proxy_chain",
36            proxy_chain.IsValid() ? proxy_chain.ToDebugString() : "invalid")
37       .Set("network_anonymization_key",
38            key->session_key().network_anonymization_key().ToDebugString());
39 }
40 
41 }  // namespace
42 
Job(QuicSessionPool * pool,const QuicSessionAliasKey & key,std::unique_ptr<CryptoClientConfigHandle> client_config_handle,RequestPriority priority,const NetLogWithSource & net_log)43 QuicSessionPool::Job::Job(
44     QuicSessionPool* pool,
45     const QuicSessionAliasKey& key,
46     std::unique_ptr<CryptoClientConfigHandle> client_config_handle,
47     RequestPriority priority,
48     const NetLogWithSource& net_log)
49     : pool_(pool),
50       key_(key),
51       client_config_handle_(std::move(client_config_handle)),
52       priority_(priority),
53       net_log_(net_log) {
54   net_log_.BeginEvent(NetLogEventType::QUIC_SESSION_POOL_JOB,
55                       [&] { return NetLogQuicSessionPoolJobParams(&key_); });
56 }
57 
~Job()58 QuicSessionPool::Job::~Job() {
59   net_log_.EndEvent(NetLogEventType::QUIC_SESSION_POOL_JOB);
60 }
61 
AddRequest(QuicSessionRequest * request)62 void QuicSessionPool::Job::AddRequest(QuicSessionRequest* request) {
63   requests_.insert(request);
64   SetRequestExpectations(request);
65 }
66 
RemoveRequest(QuicSessionRequest * request)67 void QuicSessionPool::Job::RemoveRequest(QuicSessionRequest* request) {
68   auto request_iter = requests_.find(request);
69   DCHECK(request_iter != requests_.end());
70   requests_.erase(request_iter);
71 }
72 
SetPriority(RequestPriority priority)73 void QuicSessionPool::Job::SetPriority(RequestPriority priority) {
74   UpdatePriority(priority_, priority);
75   priority_ = priority;
76 }
77 
AssociateWithNetLogSource(const NetLogWithSource & http_stream_job_net_log) const78 void QuicSessionPool::Job::AssociateWithNetLogSource(
79     const NetLogWithSource& http_stream_job_net_log) const {
80   net_log().AddEventReferencingSource(
81       NetLogEventType::QUIC_SESSION_POOL_JOB_BOUND_TO,
82       http_stream_job_net_log.source());
83   http_stream_job_net_log.AddEventReferencingSource(
84       NetLogEventType::BOUND_TO_QUIC_SESSION_POOL_JOB, net_log().source());
85 }
86 
UpdatePriority(RequestPriority old_priority,RequestPriority new_priority)87 void QuicSessionPool::Job::UpdatePriority(RequestPriority old_priority,
88                                           RequestPriority new_priority) {}
89 
90 }  // namespace net
91