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