1*6777b538SAndroid Build Coastguard Worker // Copyright 2019 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker #include "net/quic/quic_http3_logger.h"
5*6777b538SAndroid Build Coastguard Worker
6*6777b538SAndroid Build Coastguard Worker #include <algorithm>
7*6777b538SAndroid Build Coastguard Worker #include <memory>
8*6777b538SAndroid Build Coastguard Worker #include <string_view>
9*6777b538SAndroid Build Coastguard Worker #include <utility>
10*6777b538SAndroid Build Coastguard Worker #include <vector>
11*6777b538SAndroid Build Coastguard Worker
12*6777b538SAndroid Build Coastguard Worker #include "base/metrics/histogram_macros.h"
13*6777b538SAndroid Build Coastguard Worker #include "base/strings/strcat.h"
14*6777b538SAndroid Build Coastguard Worker #include "base/strings/string_number_conversions.h"
15*6777b538SAndroid Build Coastguard Worker #include "net/http/http_log_util.h"
16*6777b538SAndroid Build Coastguard Worker #include "net/log/net_log_capture_mode.h"
17*6777b538SAndroid Build Coastguard Worker #include "net/log/net_log_event_type.h"
18*6777b538SAndroid Build Coastguard Worker #include "net/log/net_log_values.h"
19*6777b538SAndroid Build Coastguard Worker #include "net/spdy/spdy_log_util.h"
20*6777b538SAndroid Build Coastguard Worker
21*6777b538SAndroid Build Coastguard Worker namespace net {
22*6777b538SAndroid Build Coastguard Worker
23*6777b538SAndroid Build Coastguard Worker namespace {
24*6777b538SAndroid Build Coastguard Worker
NetLogSettingsParams(const quic::SettingsFrame & frame)25*6777b538SAndroid Build Coastguard Worker base::Value::Dict NetLogSettingsParams(const quic::SettingsFrame& frame) {
26*6777b538SAndroid Build Coastguard Worker base::Value::Dict dict;
27*6777b538SAndroid Build Coastguard Worker for (auto setting : frame.values) {
28*6777b538SAndroid Build Coastguard Worker dict.Set(
29*6777b538SAndroid Build Coastguard Worker quic::H3SettingsToString(
30*6777b538SAndroid Build Coastguard Worker static_cast<quic::Http3AndQpackSettingsIdentifiers>(setting.first)),
31*6777b538SAndroid Build Coastguard Worker static_cast<int>(setting.second));
32*6777b538SAndroid Build Coastguard Worker }
33*6777b538SAndroid Build Coastguard Worker return dict;
34*6777b538SAndroid Build Coastguard Worker }
35*6777b538SAndroid Build Coastguard Worker
NetLogPriorityUpdateParams(const quic::PriorityUpdateFrame & frame)36*6777b538SAndroid Build Coastguard Worker base::Value::Dict NetLogPriorityUpdateParams(
37*6777b538SAndroid Build Coastguard Worker const quic::PriorityUpdateFrame& frame) {
38*6777b538SAndroid Build Coastguard Worker return base::Value::Dict()
39*6777b538SAndroid Build Coastguard Worker .Set("prioritized_element_id",
40*6777b538SAndroid Build Coastguard Worker NetLogNumberValue(frame.prioritized_element_id))
41*6777b538SAndroid Build Coastguard Worker .Set("priority_field_value", frame.priority_field_value);
42*6777b538SAndroid Build Coastguard Worker }
43*6777b538SAndroid Build Coastguard Worker
NetLogTwoIntParams(std::string_view name1,uint64_t value1,std::string_view name2,uint64_t value2)44*6777b538SAndroid Build Coastguard Worker base::Value::Dict NetLogTwoIntParams(std::string_view name1,
45*6777b538SAndroid Build Coastguard Worker uint64_t value1,
46*6777b538SAndroid Build Coastguard Worker std::string_view name2,
47*6777b538SAndroid Build Coastguard Worker uint64_t value2) {
48*6777b538SAndroid Build Coastguard Worker return base::Value::Dict()
49*6777b538SAndroid Build Coastguard Worker .Set(name1, NetLogNumberValue(value1))
50*6777b538SAndroid Build Coastguard Worker .Set(name2, NetLogNumberValue(value2));
51*6777b538SAndroid Build Coastguard Worker }
52*6777b538SAndroid Build Coastguard Worker
NetLogThreeIntParams(std::string_view name1,uint64_t value1,std::string_view name2,uint64_t value2,std::string_view name3,uint64_t value3)53*6777b538SAndroid Build Coastguard Worker base::Value::Dict NetLogThreeIntParams(std::string_view name1,
54*6777b538SAndroid Build Coastguard Worker uint64_t value1,
55*6777b538SAndroid Build Coastguard Worker std::string_view name2,
56*6777b538SAndroid Build Coastguard Worker uint64_t value2,
57*6777b538SAndroid Build Coastguard Worker std::string_view name3,
58*6777b538SAndroid Build Coastguard Worker uint64_t value3) {
59*6777b538SAndroid Build Coastguard Worker return base::Value::Dict()
60*6777b538SAndroid Build Coastguard Worker .Set(name1, NetLogNumberValue(value1))
61*6777b538SAndroid Build Coastguard Worker .Set(name2, NetLogNumberValue(value2))
62*6777b538SAndroid Build Coastguard Worker .Set(name3, NetLogNumberValue(value3));
63*6777b538SAndroid Build Coastguard Worker }
64*6777b538SAndroid Build Coastguard Worker
ElideQuicHeaderListForNetLog(const quic::QuicHeaderList & headers,NetLogCaptureMode capture_mode)65*6777b538SAndroid Build Coastguard Worker base::Value::List ElideQuicHeaderListForNetLog(
66*6777b538SAndroid Build Coastguard Worker const quic::QuicHeaderList& headers,
67*6777b538SAndroid Build Coastguard Worker NetLogCaptureMode capture_mode) {
68*6777b538SAndroid Build Coastguard Worker base::Value::List headers_list;
69*6777b538SAndroid Build Coastguard Worker for (const auto& header : headers) {
70*6777b538SAndroid Build Coastguard Worker std::string_view key = header.first;
71*6777b538SAndroid Build Coastguard Worker std::string_view value = header.second;
72*6777b538SAndroid Build Coastguard Worker headers_list.Append(NetLogStringValue(
73*6777b538SAndroid Build Coastguard Worker base::StrCat({key, ": ",
74*6777b538SAndroid Build Coastguard Worker ElideHeaderValueForNetLog(capture_mode, std::string(key),
75*6777b538SAndroid Build Coastguard Worker std::string(value))})));
76*6777b538SAndroid Build Coastguard Worker }
77*6777b538SAndroid Build Coastguard Worker return headers_list;
78*6777b538SAndroid Build Coastguard Worker }
79*6777b538SAndroid Build Coastguard Worker
80*6777b538SAndroid Build Coastguard Worker } // namespace
81*6777b538SAndroid Build Coastguard Worker
QuicHttp3Logger(const NetLogWithSource & net_log)82*6777b538SAndroid Build Coastguard Worker QuicHttp3Logger::QuicHttp3Logger(const NetLogWithSource& net_log)
83*6777b538SAndroid Build Coastguard Worker : net_log_(net_log) {}
84*6777b538SAndroid Build Coastguard Worker
85*6777b538SAndroid Build Coastguard Worker QuicHttp3Logger::~QuicHttp3Logger() = default;
86*6777b538SAndroid Build Coastguard Worker
OnControlStreamCreated(quic::QuicStreamId stream_id)87*6777b538SAndroid Build Coastguard Worker void QuicHttp3Logger::OnControlStreamCreated(quic::QuicStreamId stream_id) {
88*6777b538SAndroid Build Coastguard Worker if (!net_log_.IsCapturing()) {
89*6777b538SAndroid Build Coastguard Worker return;
90*6777b538SAndroid Build Coastguard Worker }
91*6777b538SAndroid Build Coastguard Worker net_log_.AddEventWithIntParams(
92*6777b538SAndroid Build Coastguard Worker NetLogEventType::HTTP3_LOCAL_CONTROL_STREAM_CREATED, "stream_id",
93*6777b538SAndroid Build Coastguard Worker stream_id);
94*6777b538SAndroid Build Coastguard Worker }
95*6777b538SAndroid Build Coastguard Worker
OnQpackEncoderStreamCreated(quic::QuicStreamId stream_id)96*6777b538SAndroid Build Coastguard Worker void QuicHttp3Logger::OnQpackEncoderStreamCreated(
97*6777b538SAndroid Build Coastguard Worker quic::QuicStreamId stream_id) {
98*6777b538SAndroid Build Coastguard Worker if (!net_log_.IsCapturing()) {
99*6777b538SAndroid Build Coastguard Worker return;
100*6777b538SAndroid Build Coastguard Worker }
101*6777b538SAndroid Build Coastguard Worker net_log_.AddEventWithIntParams(
102*6777b538SAndroid Build Coastguard Worker NetLogEventType::HTTP3_LOCAL_QPACK_ENCODER_STREAM_CREATED, "stream_id",
103*6777b538SAndroid Build Coastguard Worker stream_id);
104*6777b538SAndroid Build Coastguard Worker }
105*6777b538SAndroid Build Coastguard Worker
OnQpackDecoderStreamCreated(quic::QuicStreamId stream_id)106*6777b538SAndroid Build Coastguard Worker void QuicHttp3Logger::OnQpackDecoderStreamCreated(
107*6777b538SAndroid Build Coastguard Worker quic::QuicStreamId stream_id) {
108*6777b538SAndroid Build Coastguard Worker if (!net_log_.IsCapturing()) {
109*6777b538SAndroid Build Coastguard Worker return;
110*6777b538SAndroid Build Coastguard Worker }
111*6777b538SAndroid Build Coastguard Worker net_log_.AddEventWithIntParams(
112*6777b538SAndroid Build Coastguard Worker NetLogEventType::HTTP3_LOCAL_QPACK_DECODER_STREAM_CREATED, "stream_id",
113*6777b538SAndroid Build Coastguard Worker stream_id);
114*6777b538SAndroid Build Coastguard Worker }
115*6777b538SAndroid Build Coastguard Worker
OnPeerControlStreamCreated(quic::QuicStreamId stream_id)116*6777b538SAndroid Build Coastguard Worker void QuicHttp3Logger::OnPeerControlStreamCreated(quic::QuicStreamId stream_id) {
117*6777b538SAndroid Build Coastguard Worker if (!net_log_.IsCapturing())
118*6777b538SAndroid Build Coastguard Worker return;
119*6777b538SAndroid Build Coastguard Worker net_log_.AddEventWithIntParams(
120*6777b538SAndroid Build Coastguard Worker NetLogEventType::HTTP3_PEER_CONTROL_STREAM_CREATED, "stream_id",
121*6777b538SAndroid Build Coastguard Worker stream_id);
122*6777b538SAndroid Build Coastguard Worker }
123*6777b538SAndroid Build Coastguard Worker
OnPeerQpackEncoderStreamCreated(quic::QuicStreamId stream_id)124*6777b538SAndroid Build Coastguard Worker void QuicHttp3Logger::OnPeerQpackEncoderStreamCreated(
125*6777b538SAndroid Build Coastguard Worker quic::QuicStreamId stream_id) {
126*6777b538SAndroid Build Coastguard Worker if (!net_log_.IsCapturing())
127*6777b538SAndroid Build Coastguard Worker return;
128*6777b538SAndroid Build Coastguard Worker net_log_.AddEventWithIntParams(
129*6777b538SAndroid Build Coastguard Worker NetLogEventType::HTTP3_PEER_QPACK_ENCODER_STREAM_CREATED, "stream_id",
130*6777b538SAndroid Build Coastguard Worker stream_id);
131*6777b538SAndroid Build Coastguard Worker }
132*6777b538SAndroid Build Coastguard Worker
OnPeerQpackDecoderStreamCreated(quic::QuicStreamId stream_id)133*6777b538SAndroid Build Coastguard Worker void QuicHttp3Logger::OnPeerQpackDecoderStreamCreated(
134*6777b538SAndroid Build Coastguard Worker quic::QuicStreamId stream_id) {
135*6777b538SAndroid Build Coastguard Worker if (!net_log_.IsCapturing())
136*6777b538SAndroid Build Coastguard Worker return;
137*6777b538SAndroid Build Coastguard Worker net_log_.AddEventWithIntParams(
138*6777b538SAndroid Build Coastguard Worker NetLogEventType::HTTP3_PEER_QPACK_DECODER_STREAM_CREATED, "stream_id",
139*6777b538SAndroid Build Coastguard Worker stream_id);
140*6777b538SAndroid Build Coastguard Worker }
141*6777b538SAndroid Build Coastguard Worker
OnSettingsFrameReceived(const quic::SettingsFrame & frame)142*6777b538SAndroid Build Coastguard Worker void QuicHttp3Logger::OnSettingsFrameReceived(
143*6777b538SAndroid Build Coastguard Worker const quic::SettingsFrame& frame) {
144*6777b538SAndroid Build Coastguard Worker // Increment value by one because empty SETTINGS frames are allowed,
145*6777b538SAndroid Build Coastguard Worker // but histograms do not support the value zero.
146*6777b538SAndroid Build Coastguard Worker UMA_HISTOGRAM_CUSTOM_COUNTS("Net.QuicSession.ReceivedSettings.CountPlusOne",
147*6777b538SAndroid Build Coastguard Worker frame.values.size() + 1, /* min = */ 1,
148*6777b538SAndroid Build Coastguard Worker /* max = */ 10, /* buckets = */ 10);
149*6777b538SAndroid Build Coastguard Worker int reserved_identifier_count = 0;
150*6777b538SAndroid Build Coastguard Worker for (const auto& value : frame.values) {
151*6777b538SAndroid Build Coastguard Worker if (value.first == quic::SETTINGS_QPACK_MAX_TABLE_CAPACITY) {
152*6777b538SAndroid Build Coastguard Worker UMA_HISTOGRAM_COUNTS_1M(
153*6777b538SAndroid Build Coastguard Worker "Net.QuicSession.ReceivedSettings.MaxTableCapacity2", value.second);
154*6777b538SAndroid Build Coastguard Worker } else if (value.first == quic::SETTINGS_MAX_FIELD_SECTION_SIZE) {
155*6777b538SAndroid Build Coastguard Worker UMA_HISTOGRAM_COUNTS_1M(
156*6777b538SAndroid Build Coastguard Worker "Net.QuicSession.ReceivedSettings.MaxHeaderListSize2", value.second);
157*6777b538SAndroid Build Coastguard Worker } else if (value.first == quic::SETTINGS_QPACK_BLOCKED_STREAMS) {
158*6777b538SAndroid Build Coastguard Worker UMA_HISTOGRAM_COUNTS_1000(
159*6777b538SAndroid Build Coastguard Worker "Net.QuicSession.ReceivedSettings.BlockedStreams", value.second);
160*6777b538SAndroid Build Coastguard Worker } else if (value.first >= 0x21 && value.first % 0x1f == 2) {
161*6777b538SAndroid Build Coastguard Worker // Reserved setting identifiers are defined at
162*6777b538SAndroid Build Coastguard Worker // https://quicwg.org/base-drafts/draft-ietf-quic-http.html#name-defined-settings-parameters.
163*6777b538SAndroid Build Coastguard Worker // These should not be treated specially on the receive side, because they
164*6777b538SAndroid Build Coastguard Worker // are sent to exercise the requirement that unknown identifiers are
165*6777b538SAndroid Build Coastguard Worker // ignored. Here an exception is made for logging only, to understand
166*6777b538SAndroid Build Coastguard Worker // what kind of identifiers are received.
167*6777b538SAndroid Build Coastguard Worker reserved_identifier_count++;
168*6777b538SAndroid Build Coastguard Worker }
169*6777b538SAndroid Build Coastguard Worker }
170*6777b538SAndroid Build Coastguard Worker UMA_HISTOGRAM_CUSTOM_COUNTS(
171*6777b538SAndroid Build Coastguard Worker "Net.QuicSession.ReceivedSettings.ReservedCountPlusOne",
172*6777b538SAndroid Build Coastguard Worker reserved_identifier_count + 1, /* min = */ 1,
173*6777b538SAndroid Build Coastguard Worker /* max = */ 5, /* buckets = */ 5);
174*6777b538SAndroid Build Coastguard Worker
175*6777b538SAndroid Build Coastguard Worker if (!net_log_.IsCapturing())
176*6777b538SAndroid Build Coastguard Worker return;
177*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(NetLogEventType::HTTP3_SETTINGS_RECEIVED,
178*6777b538SAndroid Build Coastguard Worker [&frame] { return NetLogSettingsParams(frame); });
179*6777b538SAndroid Build Coastguard Worker }
180*6777b538SAndroid Build Coastguard Worker
OnGoAwayFrameReceived(const quic::GoAwayFrame & frame)181*6777b538SAndroid Build Coastguard Worker void QuicHttp3Logger::OnGoAwayFrameReceived(const quic::GoAwayFrame& frame) {
182*6777b538SAndroid Build Coastguard Worker if (!net_log_.IsCapturing()) {
183*6777b538SAndroid Build Coastguard Worker return;
184*6777b538SAndroid Build Coastguard Worker }
185*6777b538SAndroid Build Coastguard Worker net_log_.AddEventWithIntParams(NetLogEventType::HTTP3_GOAWAY_RECEIVED,
186*6777b538SAndroid Build Coastguard Worker "stream_id", frame.id);
187*6777b538SAndroid Build Coastguard Worker }
188*6777b538SAndroid Build Coastguard Worker
OnPriorityUpdateFrameReceived(const quic::PriorityUpdateFrame & frame)189*6777b538SAndroid Build Coastguard Worker void QuicHttp3Logger::OnPriorityUpdateFrameReceived(
190*6777b538SAndroid Build Coastguard Worker const quic::PriorityUpdateFrame& frame) {
191*6777b538SAndroid Build Coastguard Worker if (!net_log_.IsCapturing()) {
192*6777b538SAndroid Build Coastguard Worker return;
193*6777b538SAndroid Build Coastguard Worker }
194*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(NetLogEventType::HTTP3_PRIORITY_UPDATE_RECEIVED,
195*6777b538SAndroid Build Coastguard Worker [&frame] { return NetLogPriorityUpdateParams(frame); });
196*6777b538SAndroid Build Coastguard Worker }
197*6777b538SAndroid Build Coastguard Worker
OnDataFrameReceived(quic::QuicStreamId stream_id,quic::QuicByteCount payload_length)198*6777b538SAndroid Build Coastguard Worker void QuicHttp3Logger::OnDataFrameReceived(quic::QuicStreamId stream_id,
199*6777b538SAndroid Build Coastguard Worker quic::QuicByteCount payload_length) {
200*6777b538SAndroid Build Coastguard Worker if (!net_log_.IsCapturing()) {
201*6777b538SAndroid Build Coastguard Worker return;
202*6777b538SAndroid Build Coastguard Worker }
203*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(
204*6777b538SAndroid Build Coastguard Worker NetLogEventType::HTTP3_DATA_FRAME_RECEIVED, [stream_id, payload_length] {
205*6777b538SAndroid Build Coastguard Worker return NetLogTwoIntParams("stream_id", stream_id, "payload_length",
206*6777b538SAndroid Build Coastguard Worker payload_length);
207*6777b538SAndroid Build Coastguard Worker });
208*6777b538SAndroid Build Coastguard Worker }
209*6777b538SAndroid Build Coastguard Worker
OnHeadersFrameReceived(quic::QuicStreamId stream_id,quic::QuicByteCount compressed_headers_length)210*6777b538SAndroid Build Coastguard Worker void QuicHttp3Logger::OnHeadersFrameReceived(
211*6777b538SAndroid Build Coastguard Worker quic::QuicStreamId stream_id,
212*6777b538SAndroid Build Coastguard Worker quic::QuicByteCount compressed_headers_length) {
213*6777b538SAndroid Build Coastguard Worker if (!net_log_.IsCapturing()) {
214*6777b538SAndroid Build Coastguard Worker return;
215*6777b538SAndroid Build Coastguard Worker }
216*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(NetLogEventType::HTTP3_HEADERS_RECEIVED,
217*6777b538SAndroid Build Coastguard Worker [stream_id, compressed_headers_length] {
218*6777b538SAndroid Build Coastguard Worker return NetLogTwoIntParams("stream_id", stream_id,
219*6777b538SAndroid Build Coastguard Worker "compressed_headers_length",
220*6777b538SAndroid Build Coastguard Worker compressed_headers_length);
221*6777b538SAndroid Build Coastguard Worker });
222*6777b538SAndroid Build Coastguard Worker }
223*6777b538SAndroid Build Coastguard Worker
OnHeadersDecoded(quic::QuicStreamId stream_id,quic::QuicHeaderList headers)224*6777b538SAndroid Build Coastguard Worker void QuicHttp3Logger::OnHeadersDecoded(quic::QuicStreamId stream_id,
225*6777b538SAndroid Build Coastguard Worker quic::QuicHeaderList headers) {
226*6777b538SAndroid Build Coastguard Worker if (!net_log_.IsCapturing()) {
227*6777b538SAndroid Build Coastguard Worker return;
228*6777b538SAndroid Build Coastguard Worker }
229*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(
230*6777b538SAndroid Build Coastguard Worker NetLogEventType::HTTP3_HEADERS_DECODED,
231*6777b538SAndroid Build Coastguard Worker [stream_id, &headers](NetLogCaptureMode capture_mode) {
232*6777b538SAndroid Build Coastguard Worker return base::Value::Dict()
233*6777b538SAndroid Build Coastguard Worker .Set("stream_id",
234*6777b538SAndroid Build Coastguard Worker NetLogNumberValue(static_cast<uint64_t>(stream_id)))
235*6777b538SAndroid Build Coastguard Worker .Set("headers",
236*6777b538SAndroid Build Coastguard Worker ElideQuicHeaderListForNetLog(headers, capture_mode));
237*6777b538SAndroid Build Coastguard Worker });
238*6777b538SAndroid Build Coastguard Worker }
239*6777b538SAndroid Build Coastguard Worker
OnUnknownFrameReceived(quic::QuicStreamId stream_id,uint64_t frame_type,quic::QuicByteCount payload_length)240*6777b538SAndroid Build Coastguard Worker void QuicHttp3Logger::OnUnknownFrameReceived(
241*6777b538SAndroid Build Coastguard Worker quic::QuicStreamId stream_id,
242*6777b538SAndroid Build Coastguard Worker uint64_t frame_type,
243*6777b538SAndroid Build Coastguard Worker quic::QuicByteCount payload_length) {
244*6777b538SAndroid Build Coastguard Worker if (!net_log_.IsCapturing()) {
245*6777b538SAndroid Build Coastguard Worker return;
246*6777b538SAndroid Build Coastguard Worker }
247*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(NetLogEventType::HTTP3_UNKNOWN_FRAME_RECEIVED,
248*6777b538SAndroid Build Coastguard Worker [stream_id, frame_type, payload_length] {
249*6777b538SAndroid Build Coastguard Worker return NetLogThreeIntParams(
250*6777b538SAndroid Build Coastguard Worker "stream_id", stream_id, "frame_type", frame_type,
251*6777b538SAndroid Build Coastguard Worker "payload_length", payload_length);
252*6777b538SAndroid Build Coastguard Worker });
253*6777b538SAndroid Build Coastguard Worker }
254*6777b538SAndroid Build Coastguard Worker
OnSettingsFrameSent(const quic::SettingsFrame & frame)255*6777b538SAndroid Build Coastguard Worker void QuicHttp3Logger::OnSettingsFrameSent(const quic::SettingsFrame& frame) {
256*6777b538SAndroid Build Coastguard Worker if (!net_log_.IsCapturing())
257*6777b538SAndroid Build Coastguard Worker return;
258*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(NetLogEventType::HTTP3_SETTINGS_SENT,
259*6777b538SAndroid Build Coastguard Worker [&frame] { return NetLogSettingsParams(frame); });
260*6777b538SAndroid Build Coastguard Worker }
261*6777b538SAndroid Build Coastguard Worker
OnSettingsFrameResumed(const quic::SettingsFrame & frame)262*6777b538SAndroid Build Coastguard Worker void QuicHttp3Logger::OnSettingsFrameResumed(const quic::SettingsFrame& frame) {
263*6777b538SAndroid Build Coastguard Worker if (!net_log_.IsCapturing())
264*6777b538SAndroid Build Coastguard Worker return;
265*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(NetLogEventType::HTTP3_SETTINGS_RESUMED,
266*6777b538SAndroid Build Coastguard Worker [&frame] { return NetLogSettingsParams(frame); });
267*6777b538SAndroid Build Coastguard Worker }
268*6777b538SAndroid Build Coastguard Worker
OnGoAwayFrameSent(quic::QuicStreamId stream_id)269*6777b538SAndroid Build Coastguard Worker void QuicHttp3Logger::OnGoAwayFrameSent(quic::QuicStreamId stream_id) {
270*6777b538SAndroid Build Coastguard Worker if (!net_log_.IsCapturing()) {
271*6777b538SAndroid Build Coastguard Worker return;
272*6777b538SAndroid Build Coastguard Worker }
273*6777b538SAndroid Build Coastguard Worker net_log_.AddEventWithIntParams(NetLogEventType::HTTP3_GOAWAY_SENT,
274*6777b538SAndroid Build Coastguard Worker "stream_id", stream_id);
275*6777b538SAndroid Build Coastguard Worker }
276*6777b538SAndroid Build Coastguard Worker
OnPriorityUpdateFrameSent(const quic::PriorityUpdateFrame & frame)277*6777b538SAndroid Build Coastguard Worker void QuicHttp3Logger::OnPriorityUpdateFrameSent(
278*6777b538SAndroid Build Coastguard Worker const quic::PriorityUpdateFrame& frame) {
279*6777b538SAndroid Build Coastguard Worker if (!net_log_.IsCapturing()) {
280*6777b538SAndroid Build Coastguard Worker return;
281*6777b538SAndroid Build Coastguard Worker }
282*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(NetLogEventType::HTTP3_PRIORITY_UPDATE_SENT,
283*6777b538SAndroid Build Coastguard Worker [&frame] { return NetLogPriorityUpdateParams(frame); });
284*6777b538SAndroid Build Coastguard Worker }
285*6777b538SAndroid Build Coastguard Worker
OnDataFrameSent(quic::QuicStreamId stream_id,quic::QuicByteCount payload_length)286*6777b538SAndroid Build Coastguard Worker void QuicHttp3Logger::OnDataFrameSent(quic::QuicStreamId stream_id,
287*6777b538SAndroid Build Coastguard Worker quic::QuicByteCount payload_length) {
288*6777b538SAndroid Build Coastguard Worker if (!net_log_.IsCapturing()) {
289*6777b538SAndroid Build Coastguard Worker return;
290*6777b538SAndroid Build Coastguard Worker }
291*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(
292*6777b538SAndroid Build Coastguard Worker NetLogEventType::HTTP3_DATA_SENT, [stream_id, payload_length] {
293*6777b538SAndroid Build Coastguard Worker return NetLogTwoIntParams("stream_id", stream_id, "payload_length",
294*6777b538SAndroid Build Coastguard Worker payload_length);
295*6777b538SAndroid Build Coastguard Worker });
296*6777b538SAndroid Build Coastguard Worker }
297*6777b538SAndroid Build Coastguard Worker
OnHeadersFrameSent(quic::QuicStreamId stream_id,const spdy::Http2HeaderBlock & header_block)298*6777b538SAndroid Build Coastguard Worker void QuicHttp3Logger::OnHeadersFrameSent(
299*6777b538SAndroid Build Coastguard Worker quic::QuicStreamId stream_id,
300*6777b538SAndroid Build Coastguard Worker const spdy::Http2HeaderBlock& header_block) {
301*6777b538SAndroid Build Coastguard Worker if (!net_log_.IsCapturing()) {
302*6777b538SAndroid Build Coastguard Worker return;
303*6777b538SAndroid Build Coastguard Worker }
304*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(
305*6777b538SAndroid Build Coastguard Worker NetLogEventType::HTTP3_HEADERS_SENT,
306*6777b538SAndroid Build Coastguard Worker [stream_id, &header_block](NetLogCaptureMode capture_mode) {
307*6777b538SAndroid Build Coastguard Worker return base::Value::Dict()
308*6777b538SAndroid Build Coastguard Worker .Set("stream_id",
309*6777b538SAndroid Build Coastguard Worker NetLogNumberValue(static_cast<uint64_t>(stream_id)))
310*6777b538SAndroid Build Coastguard Worker .Set("headers",
311*6777b538SAndroid Build Coastguard Worker ElideHttp2HeaderBlockForNetLog(header_block, capture_mode));
312*6777b538SAndroid Build Coastguard Worker });
313*6777b538SAndroid Build Coastguard Worker }
314*6777b538SAndroid Build Coastguard Worker
315*6777b538SAndroid Build Coastguard Worker } // namespace net
316