reportHttpClientRequestStart method
Public API for non-Dio networking to report a request start to DevTools. Returns a generated requestId to be used for subsequent events.
Implementation
String reportHttpClientRequestStart({
required double contextId,
required Uri uri,
String method = 'GET',
Map<String, String>? headers,
List<int> data = const <int>[],
}) {
final requestId = _nextHttpRequestId();
// Track in NetworkStore so DevTools panel can render the row
final networkRequest = NetworkRequest(
requestId: requestId,
url: uri.toString(),
method: method,
requestHeaders: _headersToMultiMap(headers),
requestData: List<int>.from(data),
startTime: DateTime.now(),
);
NetworkStore().addRequest(contextId.toInt(), networkRequest);
// Emit CDP requestWillBeSent
sendEventToFrontend(NetworkRequestWillBeSentEvent(
requestId: requestId,
loaderId: contextId.toString(),
requestMethod: method,
url: uri.toString(),
headers: _headersToMultiMap(headers),
timestamp: (DateTime.now().millisecondsSinceEpoch - _initialTimestamp) / 1000,
data: data,
));
// Optionally emit extra info
final extraHeaders = <String, List<String>>{
':authority': [uri.authority],
':method': [method],
':path': [uri.path],
':scheme': [uri.scheme],
};
sendEventToFrontend(NetworkRequestWillBeSendExtraInfo(
associatedCookies: const [],
clientSecurityState: const {
'initiatorIsSecureContext': true,
'initiatorIPAddressSpace': 'Local',
'privateNetworkRequestPolicy': 'PreflightWarn'
},
connectTiming: {
'requestTime': (DateTime.now().millisecondsSinceEpoch - _initialTimestamp) / 1000,
},
headers: {
..._headersToMultiMap(headers),
...extraHeaders,
},
siteHasCookieInOtherPartition: false,
requestId: requestId,
));
return requestId;
}