@@ -224,7 +224,14 @@ async function perform_http_request(params) {
224
224
var response_headers = { } ;
225
225
226
226
for ( var pair of response . headers . entries ( ) ) {
227
- response_headers [ pair [ 0 ] ] = pair [ 1 ] ;
227
+ // Fix Set-Cookie from onHeadersReceived (fetch() doesn't expose it)
228
+ if ( pair [ 0 ] === 'x-set-cookie' ) {
229
+ // Original Set-Cookie may merge multiple headers, we have it packed
230
+ response_headers [ 'Set-Cookie' ] = JSON . parse ( pair [ 1 ] ) ;
231
+ }
232
+ else {
233
+ response_headers [ pair [ 0 ] ] = pair [ 1 ] ;
234
+ }
228
235
}
229
236
230
237
const redirect_hack_url_prefix = `${ location . origin . toString ( ) } /redirect-hack.html?id=` ;
@@ -244,7 +251,15 @@ async function perform_http_request(params) {
244
251
// Format headers
245
252
var redirect_hack_headers = { } ;
246
253
response_metadata . headers . map ( header_data => {
247
- redirect_hack_headers [ header_data . name ] = header_data . value ;
254
+ // Original Set-Cookie may merge multiple headers, skip it
255
+ if ( header_data . name . toLowerCase ( ) !== 'set-cookie' ) {
256
+ if ( header_data . name === 'X-Set-Cookie' ) {
257
+ redirect_hack_headers [ 'Set-Cookie' ] = JSON . parse ( header_data . value ) ;
258
+ }
259
+ else {
260
+ redirect_hack_headers [ header_data . name ] = header_data . value ;
261
+ }
262
+ }
248
263
} ) ;
249
264
250
265
const redirect_hack_data = {
@@ -427,8 +442,26 @@ chrome.webRequest.onHeadersReceived.addListener(function(details) {
427
442
return
428
443
}
429
444
445
+ // Rewrite Set-Cookie to expose it in fetch()
446
+ cookies = [ ]
447
+ details . responseHeaders . map ( responseHeader => {
448
+ if ( responseHeader . name . toLowerCase ( ) === 'set-cookie' ) {
449
+ cookies . push ( responseHeader . value ) ;
450
+ }
451
+ } ) ;
452
+ if ( cookies . length != 0 ) {
453
+ details . responseHeaders . push ( {
454
+ 'name' : 'X-Set-Cookie' ,
455
+ // We pack array of cookies into string and depack later.
456
+ // Otherwise multiple Set-Cookie headers would be merged together.
457
+ 'value' : JSON . stringify ( cookies )
458
+ } ) ;
459
+ }
460
+
430
461
if ( ! REDIRECT_STATUS_CODES . includes ( details . statusCode ) ) {
431
- return
462
+ return {
463
+ responseHeaders : details . responseHeaders
464
+ }
432
465
}
433
466
434
467
const redirect_hack_id = uuidv4 ( ) ;
@@ -444,4 +477,4 @@ chrome.webRequest.onHeadersReceived.addListener(function(details) {
444
477
} ;
445
478
} , {
446
479
urls : [ "<all_urls>" ]
447
- } , [ "blocking" , "responseHeaders" , "extraHeaders" ] ) ;
480
+ } , [ "blocking" , "responseHeaders" , "extraHeaders" ] ) ;
0 commit comments