23
23
SOME_HEADER_VALUE = 'SOME HEADER VALUE'
24
24
ANOTHER_HEADER_NAME = 'Another-Header-Name'
25
25
ANOTHER_HEADER_VALUE = 'ANOTHER HEADER VALUE'
26
+ REFERER_HEADER_NAME = "Referer"
27
+ REFERER_HEADER_VALUE = "http://google.com/"
26
28
27
29
28
30
@pytest_asyncio .fixture
@@ -74,10 +76,11 @@ async def _assert_headers(context_id,
74
76
headers = await get_headers (context_id , same_origin )
75
77
for key , value in expected_headers .items ():
76
78
if value is None :
77
- assert key not in headers
79
+ assert key not in headers , f"' { key } ' header should not be present in the request headers"
78
80
else :
79
- assert key in headers
80
- assert headers [key ] == value
81
+ assert key in headers , f"'{ key } ' header should be present in the request headers"
82
+ assert headers [
83
+ key ] == value , f"'{ key } ' header should have value of '{ value } '"
81
84
82
85
return _assert_headers
83
86
@@ -121,6 +124,19 @@ async def test_network_set_extra_headers_global(websocket, context_id, setup,
121
124
SOME_HEADER_NAME : None
122
125
})
123
126
127
+ # Clear headers.
128
+ await execute_command (websocket , {
129
+ "method" : "network.setExtraHeaders" ,
130
+ "params" : {
131
+ "headers" : [],
132
+ }
133
+ })
134
+ await assert_headers (context_id ,
135
+ expected_headers = {
136
+ ANOTHER_HEADER_NAME : None ,
137
+ SOME_HEADER_NAME : None
138
+ })
139
+
124
140
125
141
@pytest .mark .asyncio
126
142
async def test_network_set_extra_headers_per_context (websocket , context_id ,
@@ -176,6 +192,26 @@ async def test_network_set_extra_headers_per_context(websocket, context_id,
176
192
SOME_HEADER_NAME : None
177
193
})
178
194
195
+ # Clear headers for the first context.
196
+ await execute_command (
197
+ websocket , {
198
+ "method" : "network.setExtraHeaders" ,
199
+ "params" : {
200
+ "contexts" : [context_id ],
201
+ "headers" : [],
202
+ }
203
+ })
204
+ await assert_headers (context_id ,
205
+ expected_headers = {
206
+ SOME_HEADER_NAME : None ,
207
+ ANOTHER_HEADER_NAME : None
208
+ })
209
+ await assert_headers (another_context_id ,
210
+ expected_headers = {
211
+ ANOTHER_HEADER_NAME : ANOTHER_HEADER_VALUE ,
212
+ SOME_HEADER_NAME : None
213
+ })
214
+
179
215
180
216
@pytest .mark .asyncio
181
217
async def test_network_set_extra_headers_per_user_context (
@@ -250,6 +286,26 @@ async def test_network_set_extra_headers_per_user_context(
250
286
SOME_HEADER_NAME : None
251
287
})
252
288
289
+ # Clear headers for the first user context.
290
+ await execute_command (
291
+ websocket , {
292
+ "method" : "network.setExtraHeaders" ,
293
+ "params" : {
294
+ "userContexts" : ["default" ],
295
+ "headers" : [],
296
+ }
297
+ })
298
+ await assert_headers (browsing_context_id_1 ,
299
+ expected_headers = {
300
+ ANOTHER_HEADER_NAME : None ,
301
+ SOME_HEADER_NAME : None
302
+ })
303
+ await assert_headers (browsing_context_id_2 ,
304
+ expected_headers = {
305
+ ANOTHER_HEADER_NAME : ANOTHER_HEADER_VALUE ,
306
+ SOME_HEADER_NAME : None
307
+ })
308
+
253
309
254
310
@pytest .mark .asyncio
255
311
async def test_network_set_extra_headers_iframe (websocket , context_id ,
@@ -301,6 +357,22 @@ async def test_network_set_extra_headers_iframe(websocket, context_id,
301
357
},
302
358
same_origin = False )
303
359
360
+ # Clear headers.
361
+ await execute_command (
362
+ websocket , {
363
+ "method" : "network.setExtraHeaders" ,
364
+ "params" : {
365
+ "contexts" : [context_id ],
366
+ "headers" : [],
367
+ }
368
+ })
369
+ await assert_headers (iframe_id ,
370
+ expected_headers = {
371
+ ANOTHER_HEADER_NAME : None ,
372
+ SOME_HEADER_NAME : None
373
+ },
374
+ same_origin = False )
375
+
304
376
305
377
@pytest .mark .asyncio
306
378
async def test_network_set_extra_headers_invalid_value (websocket , context_id ,
@@ -324,3 +396,83 @@ async def test_network_set_extra_headers_invalid_value(websocket, context_id,
324
396
}],
325
397
}
326
398
})
399
+
400
+
401
+ @pytest .mark .asyncio
402
+ async def test_network_set_extra_headers_referer_with_fetch (
403
+ websocket , context_id , setup , assert_headers ):
404
+ await setup (context_id )
405
+ await execute_command (
406
+ websocket , {
407
+ "method" : "network.setExtraHeaders" ,
408
+ "params" : {
409
+ "headers" : [{
410
+ 'name' : SOME_HEADER_NAME ,
411
+ 'value' : {
412
+ 'type' : 'string' ,
413
+ 'value' : SOME_HEADER_VALUE
414
+ }
415
+ }, {
416
+ 'name' : REFERER_HEADER_NAME ,
417
+ 'value' : {
418
+ 'type' : 'string' ,
419
+ 'value' : REFERER_HEADER_VALUE
420
+ }
421
+ }],
422
+ }
423
+ })
424
+
425
+ await assert_headers (context_id ,
426
+ expected_headers = {
427
+ SOME_HEADER_NAME : SOME_HEADER_VALUE ,
428
+ REFERER_HEADER_NAME : REFERER_HEADER_VALUE
429
+ })
430
+
431
+
432
+ @pytest .mark .asyncio
433
+ async def test_network_set_extra_headers_referer_with_navigation (
434
+ websocket , context_id , url_echo ):
435
+ await execute_command (
436
+ websocket , {
437
+ "method" : "network.setExtraHeaders" ,
438
+ "params" : {
439
+ "headers" : [{
440
+ 'name' : SOME_HEADER_NAME ,
441
+ 'value' : {
442
+ 'type' : 'string' ,
443
+ 'value' : SOME_HEADER_VALUE
444
+ }
445
+ }, {
446
+ 'name' : REFERER_HEADER_NAME ,
447
+ 'value' : {
448
+ 'type' : 'string' ,
449
+ 'value' : REFERER_HEADER_VALUE
450
+ }
451
+ }],
452
+ }
453
+ })
454
+
455
+ await goto_url (websocket , context_id , url_echo )
456
+
457
+ response = await execute_command (
458
+ websocket , {
459
+ 'method' : 'script.evaluate' ,
460
+ 'params' : {
461
+ 'expression' : "document.body.innerText" ,
462
+ 'awaitPromise' : True ,
463
+ 'target' : {
464
+ 'context' : context_id
465
+ }
466
+ }
467
+ })
468
+
469
+ assert response ['result' ]['value' ]
470
+ request_data = JSONDecoder ().decode (response ['result' ]['value' ])
471
+ headers = request_data ['headers' ]
472
+ assert headers [SOME_HEADER_NAME ] == SOME_HEADER_VALUE
473
+
474
+ pytest .xfail (
475
+ "`Referer` headers is not set during navigation: https://github.com/GoogleChromeLabs/chromium-bidi/issues/3637"
476
+ )
477
+ assert REFERER_HEADER_NAME in headers , f"'{ REFERER_HEADER_NAME } ' header should be present in the request headers"
478
+ assert headers [REFERER_HEADER_NAME ] == REFERER_HEADER_VALUE
0 commit comments