@@ -53,7 +53,8 @@ const test = playwrightTest.extend<ExtraFixtures>({
53
53
const server = createHttpServer ( ( req : http . IncomingMessage , res : http . ServerResponse ) => {
54
54
res . end ( '<html><body>from-dummy-server</body></html>' ) ;
55
55
} ) ;
56
- await new Promise < void > ( resolve => server . listen ( 0 , resolve ) ) ;
56
+ // Only listen on IPv4 to check that we don't try to connect to it via IPv6.
57
+ await new Promise < void > ( resolve => server . listen ( 0 , '127.0.0.1' , resolve ) ) ;
57
58
await use ( ( server . address ( ) as net . AddressInfo ) . port ) ;
58
59
await new Promise < Error > ( resolve => server . close ( resolve ) ) ;
59
60
} ,
@@ -792,9 +793,23 @@ for (const kind of ['launchServer', 'run-server'] as const) {
792
793
const remoteServer = await startRemoteServer ( kind ) ;
793
794
const browser = await connect ( remoteServer . wsEndpoint ( ) , { _exposeNetwork : '*' } as any , dummyServerPort ) ;
794
795
const page = await browser . newPage ( ) ;
795
- await page . goto ( `http://127.0.0.1:${ examplePort } /foo.html` ) ;
796
- expect ( await page . content ( ) ) . toContain ( 'from-dummy-server' ) ;
797
- expect ( reachedOriginalTarget ) . toBe ( false ) ;
796
+ {
797
+ await page . setContent ( 'empty' ) ;
798
+ await page . goto ( `http://127.0.0.1:${ examplePort } /foo.html` ) ;
799
+ expect ( await page . content ( ) ) . toContain ( 'from-dummy-server' ) ;
800
+ expect ( reachedOriginalTarget ) . toBe ( false ) ;
801
+ }
802
+ {
803
+ await page . setContent ( 'empty' ) ;
804
+ await page . goto ( `http://localhost:${ examplePort } /foo.html` ) ;
805
+ expect ( await page . content ( ) ) . toContain ( 'from-dummy-server' ) ;
806
+ expect ( reachedOriginalTarget ) . toBe ( false ) ;
807
+ }
808
+ {
809
+ const error = await page . goto ( `http://[::1]:${ examplePort } /foo.html` ) . catch ( ( ) => 'failed' ) ;
810
+ expect ( error ) . toBe ( 'failed' ) ;
811
+ expect ( reachedOriginalTarget ) . toBe ( false ) ;
812
+ }
798
813
} ) ;
799
814
800
815
test ( 'should proxy ipv6 localhost requests @smoke' , async ( { startRemoteServer, server, browserName, connect, platform, ipV6ServerPort } , testInfo ) => {
@@ -809,15 +824,27 @@ for (const kind of ['launchServer', 'run-server'] as const) {
809
824
const remoteServer = await startRemoteServer ( kind ) ;
810
825
const browser = await connect ( remoteServer . wsEndpoint ( ) , { exposeNetwork : '*' } , ipV6ServerPort ) ;
811
826
const page = await browser . newPage ( ) ;
812
- await page . goto ( `http://[::1]:${ examplePort } /foo.html` ) ;
813
- expect ( await page . content ( ) ) . toContain ( 'from-ipv6-server' ) ;
814
- const page2 = await browser . newPage ( ) ;
815
- await page2 . goto ( `http://localhost:${ examplePort } /foo.html` ) ;
816
- expect ( await page2 . content ( ) ) . toContain ( 'from-ipv6-server' ) ;
817
- expect ( reachedOriginalTarget ) . toBe ( false ) ;
827
+ {
828
+ await page . setContent ( 'empty' ) ;
829
+ await page . goto ( `http://[::1]:${ examplePort } /foo.html` ) ;
830
+ expect ( await page . content ( ) ) . toContain ( 'from-ipv6-server' ) ;
831
+ expect ( reachedOriginalTarget ) . toBe ( false ) ;
832
+ }
833
+ {
834
+ await page . setContent ( 'empty' ) ;
835
+ await page . goto ( `http://localhost:${ examplePort } /foo.html` ) ;
836
+ expect ( await page . content ( ) ) . toContain ( 'from-ipv6-server' ) ;
837
+ expect ( reachedOriginalTarget ) . toBe ( false ) ;
838
+ }
839
+ {
840
+ const error = await page . goto ( `http://127.0.0.1:${ examplePort } /foo.html` ) . catch ( ( ) => 'failed' ) ;
841
+ expect ( error ) . toBe ( 'failed' ) ;
842
+ expect ( reachedOriginalTarget ) . toBe ( false ) ;
843
+ }
818
844
} ) ;
819
845
820
- test ( 'should proxy localhost requests from fetch api' , async ( { startRemoteServer, server, browserName, connect, channel, platform, dummyServerPort } , workerInfo ) => {
846
+ test ( 'should proxy requests from fetch api' , async ( { startRemoteServer, server, browserName, connect, channel, platform, dummyServerPort } , workerInfo ) => {
847
+ test . fixme ( true , 'broken because of socks proxy agent error: Socks5 proxy rejected connection - ConnectionRefused' ) ;
821
848
test . skip ( browserName === 'webkit' && platform === 'darwin' , 'no localhost proxying' ) ;
822
849
823
850
let reachedOriginalTarget = false ;
@@ -829,10 +856,54 @@ for (const kind of ['launchServer', 'run-server'] as const) {
829
856
const remoteServer = await startRemoteServer ( kind ) ;
830
857
const browser = await connect ( remoteServer . wsEndpoint ( ) , { exposeNetwork : '*' } , dummyServerPort ) ;
831
858
const page = await browser . newPage ( ) ;
832
- const response = await page . request . get ( `http://127.0.0.1:${ examplePort } /foo.html` ) ;
833
- expect ( response . status ( ) ) . toBe ( 200 ) ;
834
- expect ( await response . text ( ) ) . toContain ( 'from-dummy-server' ) ;
835
- expect ( reachedOriginalTarget ) . toBe ( false ) ;
859
+ {
860
+ const response = await page . request . get ( `http://localhost:${ examplePort } /foo.html` ) ;
861
+ expect ( response . status ( ) ) . toBe ( 200 ) ;
862
+ expect ( await response . text ( ) ) . toContain ( 'from-dummy-server' ) ;
863
+ expect ( reachedOriginalTarget ) . toBe ( false ) ;
864
+ }
865
+ {
866
+ const response = await page . request . get ( `http://127.0.0.1:${ examplePort } /foo.html` ) ;
867
+ expect ( response . status ( ) ) . toBe ( 200 ) ;
868
+ expect ( await response . text ( ) ) . toContain ( 'from-dummy-server' ) ;
869
+ expect ( reachedOriginalTarget ) . toBe ( false ) ;
870
+ }
871
+ {
872
+ const error = await page . request . get ( `http://[::1]:${ examplePort } /foo.html` ) . catch ( e => 'failed' ) ;
873
+ expect ( error ) . toBe ( 'failed' ) ;
874
+ expect ( reachedOriginalTarget ) . toBe ( false ) ;
875
+ }
876
+ } ) ;
877
+
878
+ test ( 'should proxy requests from fetch api over ipv6' , async ( { startRemoteServer, server, browserName, connect, channel, platform, ipV6ServerPort } , workerInfo ) => {
879
+ test . skip ( browserName === 'webkit' && platform === 'darwin' , 'no localhost proxying' ) ;
880
+
881
+ let reachedOriginalTarget = false ;
882
+ server . setRoute ( '/foo.html' , async ( req , res ) => {
883
+ reachedOriginalTarget = true ;
884
+ res . end ( '<html><body></body></html>' ) ;
885
+ } ) ;
886
+ const examplePort = 20_000 + workerInfo . workerIndex * 3 ;
887
+ const remoteServer = await startRemoteServer ( kind ) ;
888
+ const browser = await connect ( remoteServer . wsEndpoint ( ) , { exposeNetwork : '*' } , ipV6ServerPort ) ;
889
+ const page = await browser . newPage ( ) ;
890
+ {
891
+ const response = await page . request . get ( `http://localhost:${ examplePort } /foo.html` ) ;
892
+ expect ( response . status ( ) ) . toBe ( 200 ) ;
893
+ expect ( await response . text ( ) ) . toContain ( 'from-ipv6-server' ) ;
894
+ expect ( reachedOriginalTarget ) . toBe ( false ) ;
895
+ }
896
+ {
897
+ const response = await page . request . get ( `http://[::1]:${ examplePort } /foo.html` ) ;
898
+ expect ( response . status ( ) ) . toBe ( 200 ) ;
899
+ expect ( await response . text ( ) ) . toContain ( 'from-ipv6-server' ) ;
900
+ expect ( reachedOriginalTarget ) . toBe ( false ) ;
901
+ }
902
+ {
903
+ const error = await page . request . get ( `http://127.0.0.1:${ examplePort } /foo.html` ) . catch ( e => 'failed' ) ;
904
+ expect ( error ) . toBe ( 'failed' ) ;
905
+ expect ( reachedOriginalTarget ) . toBe ( false ) ;
906
+ }
836
907
} ) ;
837
908
838
909
test ( 'should proxy local.playwright requests' , async ( { connect, server, dummyServerPort, startRemoteServer } , workerInfo ) => {
0 commit comments