onResponseReceived method
void
onResponseReceived(
- EngineContext context,
- String requestId,
- 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 ?? {};
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));
}