onResponseReceived method

void onResponseReceived(
  1. EngineContext context,
  2. String requestId,
  3. VoltronHttpResponse? httpResponse
)

on network request response callback invoke with httpResponse more details, see https://chromedevtools.github.io/devtools-protocol/tot/Network/#event-responseReceived

Implementation

void onResponseReceived(EngineContext context, String requestId, VoltronHttpResponse? httpResponse) {
  final responseHeader = httpResponse?.headerMap.map((key, value) => MapEntry(key, value.join(';'))) ?? {};
  final requestHeader = httpResponse?.requestOptions?.headers.map((key, value) {
        if (value is List) {
          return MapEntry(key, value.join(';'));
        }
        return MapEntry(key, value.toString());
      }) ?? {};
  String mimeType = responseHeader[kContentType] ?? "";
  if (mimeType.isEmpty) {
    mimeType = MimeType.getType(httpResponse?.requestOptions?.responseType);
  }

  final responseContentMap = {
    kHttpResponseUrl: httpResponse?.requestOptions?.path ?? '',
    kHttpResponseStatus: httpResponse?.statusCode ?? HttpStatus.ok,
    kHttpResponseStatusText: httpResponse?.statusMessage ?? '',
    kHttpResponseHeaders: responseHeader,
    kHttpResponseMimeType: mimeType,
    kHttpResponseRequestHeaders: requestHeader,
    kHttpResponseConnectionReused: false,
    kHttpResponseConnectionId: int.parse(requestId),
    kHttpResponseFromDiskCache: false,
    kHttpResponseFromPrefetchCache: false,
    kHttpResponseFromServiceWorker: false,
    kHttpResponseEncodedDataLength: NetworkUtil.getEncodedDataLength(httpResponse?.data),
    kHttpResponseSecurityState: kDefaultSecurityState,
  };
  final responseMap = {
    kHttpResponseRequestId: requestId,
    kHttpResponseLoaderId: requestId,
    kHttpResponseTimestamp: NetworkUtil.getTimeStamp(),
    kHttpResponseType: kDefaultResponseType,
    kHttpResponseResponse: responseContentMap
  };
  final data = httpResponse?.data;
  final responseBody = data is String ? data : json.encode(data);
  VoltronApi.notifyResponseReceived(context.engineId, requestId, json.encode(responseMap), responseBody);

  final loadingFinishMap = {
    kLoadingFinishedEncodeDataLength: NetworkUtil.getEncodedDataLength(httpResponse?.data),
    kLoadingFinishedRequestId: requestId,
    kLoadingFinishedShouldReportCorbBlocking: false,
    kLoadingFinishedTimestamp: NetworkUtil.getTimeStamp(),
  };
  VoltronApi.notifyLoadingFinished(context.engineId, requestId, json.encode(loadingFinishMap));
}