33// found in the LICENSE file or at https://developers.google.com/open-source/licenses/bsd.
44
55import 'dart:convert' ;
6+ import 'dart:typed_data' ;
67
78import '../../screens/network/utils/http_utils.dart' ;
89import '../../shared/http/http_request_data.dart' ;
9- import '../../shared/primitives/utils.dart' ;
1010import 'constants.dart' ;
1111
1212/// A class representing a single entry in the HTTP Archive (HAR) format.
@@ -119,6 +119,11 @@ class HarDataEntry {
119119 };
120120 }).toList ();
121121
122+ final encodedRequest = e.encodedRequest;
123+ final encodedResponse = e.encodedResponse;
124+ final decodedRequest = _decodeBytes (encodedRequest);
125+ final decodedResponse = _decodeBytes (encodedResponse);
126+
122127 return < String , Object ? > {
123128 NetworkEventKeys .startedDateTime.name: e.startTimestamp
124129 .toUtc ()
@@ -134,12 +139,12 @@ class HarDataEntry {
134139 NetworkEventKeys .queryString.name: queryString,
135140 NetworkEventKeys .postData.name: < String , Object ? > {
136141 NetworkEventKeys .mimeType.name: e.contentType,
137- NetworkEventKeys .text.name: e.requestBody ,
142+ NetworkEventKeys .text.name: decodedRequest ,
138143 },
139144 NetworkEventKeys .headersSize.name: calculateHeadersSize (
140145 e.requestHeaders,
141146 ),
142- NetworkEventKeys .bodySize.name: _calculateBodySize (e.requestBody ),
147+ NetworkEventKeys .bodySize.name: _calculateBodySize (encodedRequest ),
143148 },
144149 // Response
145150 NetworkEventKeys .response.name: < String , Object ? > {
@@ -151,15 +156,17 @@ class HarDataEntry {
151156 NetworkEventKeys .cookies.name: responseCookies,
152157 NetworkEventKeys .headers.name: responseHeaders,
153158 NetworkEventKeys .content.name: < String , Object ? > {
154- NetworkEventKeys .size.name: e.responseBody ? .length,
159+ NetworkEventKeys .size.name: encodedResponse ? .length ?? 0 ,
155160 NetworkEventKeys .mimeType.name: e.type,
156- NetworkEventKeys .text.name: e.responseBody,
161+ NetworkEventKeys .text.name: decodedResponse,
162+ if (_isBinary (encodedResponse))
163+ NetworkEventKeys .encoding.name: 'base64' ,
157164 },
158165 NetworkEventKeys .redirectURL.name: '' ,
159166 NetworkEventKeys .headersSize.name: calculateHeadersSize (
160167 e.responseHeaders,
161168 ),
162- NetworkEventKeys .bodySize.name: _calculateBodySize (e.responseBody ),
169+ NetworkEventKeys .bodySize.name: _calculateBodySize (encodedResponse ),
163170 },
164171 // Cache
165172 NetworkEventKeys .cache.name: < String , Object ? > {},
@@ -194,6 +201,25 @@ class HarDataEntry {
194201 return request;
195202 }
196203
204+ static String ? _decodeBytes (Uint8List ? bytes) {
205+ if (bytes == null ) return null ;
206+ try {
207+ return utf8.decode (bytes);
208+ } catch (_) {
209+ return base64Encode (bytes);
210+ }
211+ }
212+
213+ static bool _isBinary (Uint8List ? bytes) {
214+ if (bytes == null ) return false ;
215+ try {
216+ utf8.decode (bytes);
217+ return false ;
218+ } catch (_) {
219+ return true ;
220+ }
221+ }
222+
197223 static Map <String , Object ?> _convertHeadersListToMap (
198224 List <Object ?> serializedHeaders,
199225 ) {
@@ -271,9 +297,6 @@ class HarDataEntry {
271297 }
272298}
273299
274- int _calculateBodySize (String ? requestBody) {
275- if (requestBody.isNullOrEmpty) {
276- return 0 ;
277- }
278- return utf8.encode (requestBody! ).length;
300+ int _calculateBodySize (Uint8List ? body) {
301+ return body? .length ?? 0 ;
279302}
0 commit comments