@@ -452,6 +452,96 @@ it('should respect set-cookie in redirect response', {
452
452
expect . soft ( await page . evaluate ( ( ) => document . cookie ) ) . toBe ( 'foo=bar' ) ;
453
453
} ) ;
454
454
455
+ it ( 'continue should not propagate cookie override to redirects' , {
456
+ annotation : [
457
+ { type : 'issue' , description : 'https://github.com/microsoft/playwright/issues/35168' } ,
458
+ ]
459
+ } , async ( { page, server, browserName } ) => {
460
+ it . fixme ( browserName === 'firefox' , 'We currently clear all headers during interception in firefox' ) ;
461
+ server . setRoute ( '/set-cookie' , ( request , response ) => {
462
+ response . writeHead ( 200 , { 'Set-Cookie' : 'foo=bar;' } ) ;
463
+ response . end ( ) ;
464
+ } ) ;
465
+ await page . goto ( server . PREFIX + '/set-cookie' ) ;
466
+ expect ( await page . evaluate ( ( ) => document . cookie ) ) . toBe ( 'foo=bar' ) ;
467
+ server . setRedirect ( '/redirect' , server . PREFIX + '/empty.html' ) ;
468
+ await page . route ( '**/redirect' , route => {
469
+ void route . continue ( {
470
+ headers : {
471
+ ...route . request ( ) . headers ( ) ,
472
+ cookie : 'override'
473
+ }
474
+ } ) ;
475
+ } ) ;
476
+ const [ serverRequest ] = await Promise . all ( [
477
+ server . waitForRequest ( '/empty.html' ) ,
478
+ page . goto ( server . PREFIX + '/redirect' )
479
+ ] ) ;
480
+ expect ( serverRequest . headers [ 'cookie' ] ) . toBe ( 'foo=bar' ) ;
481
+ } ) ;
482
+
483
+ it ( 'continue should not override cookie' , {
484
+ annotation : [
485
+ { type : 'issue' , description : 'https://github.com/microsoft/playwright/issues/35168' } ,
486
+ ]
487
+ } , async ( { page, server, browserName } ) => {
488
+ it . fixme ( browserName === 'firefox' , 'We currently clear all headers during interception in firefox' ) ;
489
+ server . setRoute ( '/set-cookie' , ( request , response ) => {
490
+ response . writeHead ( 200 , { 'Set-Cookie' : 'foo=bar;' } ) ;
491
+ response . end ( ) ;
492
+ } ) ;
493
+ await page . goto ( server . PREFIX + '/set-cookie' ) ;
494
+ expect ( await page . evaluate ( ( ) => document . cookie ) ) . toBe ( 'foo=bar' ) ;
495
+ await page . route ( '**' , route => {
496
+ void route . continue ( {
497
+ headers : {
498
+ ...route . request ( ) . headers ( ) ,
499
+ cookie : 'override' ,
500
+ custom : 'value'
501
+ }
502
+ } ) ;
503
+ } ) ;
504
+ const [ serverRequest ] = await Promise . all ( [
505
+ server . waitForRequest ( '/empty.html' ) ,
506
+ page . goto ( server . EMPTY_PAGE )
507
+ ] ) ;
508
+ // Original cookie from the browser's cookie jar should be sent.
509
+ expect ( serverRequest . headers [ 'cookie' ] ) . toBe ( 'foo=bar' ) ;
510
+ expect ( serverRequest . headers [ 'custom' ] ) . toBe ( 'value' ) ;
511
+ } ) ;
512
+
513
+ it ( 'redirect after continue should be able to delete cookie' , {
514
+ annotation : [
515
+ { type : 'issue' , description : 'https://github.com/microsoft/playwright/issues/35168' } ,
516
+ ]
517
+ } , async ( { page, server } ) => {
518
+ server . setRoute ( '/set-cookie' , ( request , response ) => {
519
+ response . writeHead ( 200 , { 'Set-Cookie' : 'foo=bar;' } ) ;
520
+ response . end ( ) ;
521
+ } ) ;
522
+ await page . goto ( server . PREFIX + '/set-cookie' ) ;
523
+ expect ( await page . evaluate ( ( ) => document . cookie ) ) . toBe ( 'foo=bar' ) ;
524
+
525
+ server . setRoute ( '/delete-cookie' , ( request , response ) => {
526
+ response . writeHead ( 200 , { 'Set-Cookie' : 'foo=bar; expires=Thu, 01 Jan 1970 00:00:00 GMT' } ) ;
527
+ response . end ( ) ;
528
+ } ) ;
529
+ server . setRedirect ( '/redirect' , '/delete-cookie' ) ;
530
+ await page . route ( '**/redirect' , route => {
531
+ void route . continue ( {
532
+ headers : {
533
+ ...route . request ( ) . headers ( ) ,
534
+ }
535
+ } ) ;
536
+ } ) ;
537
+ await page . goto ( server . PREFIX + '/redirect' ) ;
538
+ const [ serverRequest ] = await Promise . all ( [
539
+ server . waitForRequest ( '/empty.html' ) ,
540
+ page . goto ( server . EMPTY_PAGE )
541
+ ] ) ;
542
+ expect ( serverRequest . headers [ 'cookie' ] ) . toBeFalsy ( ) ;
543
+ } ) ;
544
+
455
545
it ( 'continue should propagate headers to redirects' , {
456
546
annotation : [
457
547
{ type : 'issue' , description : 'https://github.com/microsoft/playwright/issues/28758' } ,
@@ -536,6 +626,7 @@ it('propagate headers same origin redirect', {
536
626
annotation : [
537
627
{ type : 'issue' , description : 'https://github.com/microsoft/playwright/issues/13106' } ,
538
628
{ type : 'issue' , description : 'https://github.com/microsoft/playwright/issues/32045' } ,
629
+ { type : 'issue' , description : 'https://github.com/microsoft/playwright/issues/35154' } ,
539
630
]
540
631
} , async ( { page, server } ) => {
541
632
await page . goto ( server . PREFIX + '/empty.html' ) ;
@@ -547,7 +638,7 @@ it('propagate headers same origin redirect', {
547
638
'Access-Control-Allow-Origin' : server . PREFIX ,
548
639
'Access-Control-Allow-Credentials' : 'true' ,
549
640
'Access-Control-Allow-Methods' : 'POST, GET, OPTIONS, DELETE' ,
550
- 'Access-Control-Allow-Headers' : 'authorization,custom' ,
641
+ 'Access-Control-Allow-Headers' : 'authorization,cookie, custom' ,
551
642
} ) ;
552
643
response . end ( ) ;
553
644
return ;
@@ -557,6 +648,7 @@ it('propagate headers same origin redirect', {
557
648
response . end ( 'done' ) ;
558
649
} ) ;
559
650
await server . setRedirect ( '/redirect' , '/something' ) ;
651
+ await page . evaluate ( ( ) => document . cookie = 'a=b' ) ;
560
652
const text = await page . evaluate ( async url => {
561
653
const data = await fetch ( url , {
562
654
headers : {
@@ -570,6 +662,7 @@ it('propagate headers same origin redirect', {
570
662
expect ( text ) . toBe ( 'done' ) ;
571
663
const serverRequest = await serverRequestPromise ;
572
664
expect . soft ( serverRequest . headers [ 'authorization' ] ) . toBe ( 'credentials' ) ;
665
+ expect . soft ( serverRequest . headers [ 'cookie' ] ) . toBe ( 'a=b' ) ;
573
666
expect . soft ( serverRequest . headers [ 'custom' ] ) . toBe ( 'foo' ) ;
574
667
} ) ;
575
668
@@ -620,6 +713,7 @@ it('propagate headers cross origin redirect', {
620
713
annotation : [
621
714
{ type : 'issue' , description : 'https://github.com/microsoft/playwright/issues/13106' } ,
622
715
{ type : 'issue' , description : 'https://github.com/microsoft/playwright/issues/32045' } ,
716
+ { type : 'issue' , description : 'https://github.com/microsoft/playwright/issues/35154' } ,
623
717
]
624
718
} , async ( { page, server, isAndroid } ) => {
625
719
it . fixme ( isAndroid , 'receives authorization:credentials header' ) ;
@@ -633,7 +727,7 @@ it('propagate headers cross origin redirect', {
633
727
'Access-Control-Allow-Origin' : server . PREFIX ,
634
728
'Access-Control-Allow-Credentials' : 'true' ,
635
729
'Access-Control-Allow-Methods' : 'POST, GET, OPTIONS, DELETE' ,
636
- 'Access-Control-Allow-Headers' : 'authorization,custom' ,
730
+ 'Access-Control-Allow-Headers' : 'authorization,cookie, custom' ,
637
731
} ) ;
638
732
response . end ( ) ;
639
733
return ;
@@ -649,6 +743,7 @@ it('propagate headers cross origin redirect', {
649
743
response . writeHead ( 301 , { location : `${ server . CROSS_PROCESS_PREFIX } /something` } ) ;
650
744
response . end ( ) ;
651
745
} ) ;
746
+ await page . evaluate ( ( ) => document . cookie = 'a=b' ) ;
652
747
const text = await page . evaluate ( async url => {
653
748
const data = await fetch ( url , {
654
749
headers : {
@@ -663,13 +758,15 @@ it('propagate headers cross origin redirect', {
663
758
const serverRequest = await serverRequestPromise ;
664
759
// Authorization header not propagated to cross-origin redirect.
665
760
expect . soft ( serverRequest . headers [ 'authorization' ] ) . toBeFalsy ( ) ;
761
+ expect . soft ( serverRequest . headers [ 'cookie' ] ) . toBeFalsy ( ) ;
666
762
expect . soft ( serverRequest . headers [ 'custom' ] ) . toBe ( 'foo' ) ;
667
763
} ) ;
668
764
669
765
it ( 'propagate headers cross origin redirect after interception' , {
670
766
annotation : [
671
767
{ type : 'issue' , description : 'https://github.com/microsoft/playwright/issues/13106' } ,
672
768
{ type : 'issue' , description : 'https://github.com/microsoft/playwright/issues/32045' } ,
769
+ { type : 'issue' , description : 'https://github.com/microsoft/playwright/issues/35154' } ,
673
770
]
674
771
} , async ( { page, server, browserName } ) => {
675
772
await page . goto ( server . PREFIX + '/empty.html' ) ;
@@ -681,7 +778,7 @@ it('propagate headers cross origin redirect after interception', {
681
778
'Access-Control-Allow-Origin' : server . PREFIX ,
682
779
'Access-Control-Allow-Credentials' : 'true' ,
683
780
'Access-Control-Allow-Methods' : 'POST, GET, OPTIONS, DELETE' ,
684
- 'Access-Control-Allow-Headers' : 'authorization,custom' ,
781
+ 'Access-Control-Allow-Headers' : 'authorization,cookie, custom' ,
685
782
} ) ;
686
783
response . end ( ) ;
687
784
return ;
@@ -697,6 +794,7 @@ it('propagate headers cross origin redirect after interception', {
697
794
response . writeHead ( 301 , { location : `${ server . CROSS_PROCESS_PREFIX } /something` } ) ;
698
795
response . end ( ) ;
699
796
} ) ;
797
+ await page . evaluate ( ( ) => document . cookie = 'a=b' ) ;
700
798
await page . route ( '**/redirect' , async route => {
701
799
await route . continue ( {
702
800
headers : {
@@ -721,6 +819,7 @@ it('propagate headers cross origin redirect after interception', {
721
819
expect . soft ( serverRequest . headers [ 'authorization' ] ) . toBeFalsy ( ) ;
722
820
else
723
821
expect . soft ( serverRequest . headers [ 'authorization' ] ) . toBe ( 'credentials' ) ;
822
+ expect . soft ( serverRequest . headers [ 'cookie' ] ) . toBeFalsy ( ) ;
724
823
expect . soft ( serverRequest . headers [ 'custom' ] ) . toBe ( 'foo' ) ;
725
824
} ) ;
726
825
0 commit comments