reportHttpClientRequestStart method

String reportHttpClientRequestStart({
  1. required double contextId,
  2. required Uri uri,
  3. String method = 'GET',
  4. Map<String, String>? headers,
  5. List<int> data = const <int>[],
})

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;
}