@@ -13,7 +13,8 @@ var Log = require('./logger'),
13
13
send = require ( 'send' ) ,
14
14
vm = require ( 'vm' ) ,
15
15
CircularJSON = require ( 'circular-json' ) ,
16
- resolve = require ( 'resolve' ) ;
16
+ resolve = require ( 'resolve' ) ,
17
+ zlib = require ( 'zlib' ) ;
17
18
18
19
exports . Server = function Server ( bsClient , workers , config , callback ) {
19
20
var testFilePaths = ( Array . isArray ( config . test_path ) ? config . test_path : [ config . test_path ] )
@@ -205,25 +206,61 @@ exports.Server = function Server(bsClient, workers, config, callback) {
205
206
response . end ( ) ;
206
207
} ;
207
208
209
+ var patchResponse = function ( data , headers , callback ) {
210
+ var mimeType = mime . lookup ( filename ) ;
211
+ var finalData = data ;
212
+ if ( mimeType === 'text/html' ) {
213
+ var matcher = / ( .* ) < \/ h e a d > / ;
214
+ var patch = getReporterPatch ( ) ;
215
+ finalData = data . replace ( matcher , patch ) ;
216
+ headers [ 'content-length' ] = finalData . length ;
217
+ }
218
+ callback && callback ( finalData , headers ) ;
219
+ } ;
220
+
221
+ var checkForEncodingAndPatch = function ( responseData , headers , callback ) {
222
+ var encoding = headers [ 'content-encoding' ] ;
223
+ if ( encoding === 'gzip' ) {
224
+ zlib . gunzip ( responseData , function ( err , decoded ) {
225
+ if ( ! err ) {
226
+ patchResponse ( decoded && decoded . toString ( ) , headers , function ( data , headers ) {
227
+ zlib . gzip ( data , function ( err , encoded ) {
228
+ if ( ! err ) {
229
+ callback && callback ( encoded , headers ) ;
230
+ }
231
+ } ) ;
232
+ } ) ;
233
+ }
234
+ } ) ;
235
+ } else if ( encoding === 'deflate' ) {
236
+ zlib . inflate ( responseData , function ( err , decoded ) {
237
+ if ( ! err ) {
238
+ patchResponse ( decoded && decoded . toString ( ) , headers , function ( data , headers ) {
239
+ zlib . deflate ( data , function ( err , encoded ) {
240
+ if ( ! err ) {
241
+ callback && callback ( encoded , headers ) ;
242
+ }
243
+ } ) ;
244
+ } ) ;
245
+ }
246
+ } ) ;
247
+ } else {
248
+ patchResponse ( responseData , headers , function ( data , headers ) {
249
+ callback && callback ( data , headers ) ;
250
+ } ) ;
251
+ }
252
+ } ;
253
+
208
254
if ( ! doNotUseProxy && config . test_server ) {
209
- proxyServer . onRequest ( request , response , config . test_server , function ( remote_response , response_data ) {
210
- var mimeType = mime . lookup ( filename ) ;
211
- var final_data = response_data ;
255
+ proxyServer . onRequest ( request , response , config . test_server , function ( remote_response , response_data ) {
212
256
var headers = remote_response . headers ;
213
- if ( mimeType === 'text/html' ) {
214
- var matcher = / ( .* ) < \/ h e a d > / ;
215
- var patch = getReporterPatch ( ) ;
216
- final_data = response_data . replace ( matcher , patch ) ;
217
- headers [ 'content-length' ] = final_data . length ;
218
- }
219
- response . writeHead ( remote_response . statusCode , headers ) ;
220
- response . write ( final_data ) ;
221
- response . end ( ) ;
222
- return ;
257
+ checkForEncodingAndPatch ( response_data , headers , function ( data , headers ) {
258
+ response . writeHead ( remote_response . statusCode , headers ) ;
259
+ response . write ( data ) ;
260
+ response . end ( ) ;
261
+ } ) ;
223
262
} ) ;
224
-
225
263
} else {
226
-
227
264
fs . exists ( filename , function ( exists ) {
228
265
if ( ! exists ) {
229
266
sendError ( response , 'file not found' , 404 ) ;
0 commit comments