@@ -13,17 +13,25 @@ const { optionDefaults } = require('../../../add-on/src/lib/options')
13
13
// const nodeTypes = ['external', 'embedded']
14
14
15
15
describe ( 'modifyRequest processing' , function ( ) {
16
- let state , dnslinkResolver , ipfsPathValidator , modifyRequest , runtime
16
+ let state , getState , dnslinkResolver , ipfsPathValidator , modifyRequest , runtime
17
17
18
18
before ( function ( ) {
19
+ // stub URL.origin in test context to return something other than null
20
+ Object . defineProperty ( URL . prototype , 'origin' , {
21
+ get : function ( ) {
22
+ let fakeOrigin = this . href . split ( '/' )
23
+ if ( fakeOrigin . length >= 3 ) {
24
+ return fakeOrigin . slice ( 0 , 3 ) . join ( '/' )
25
+ }
26
+ }
27
+ } )
19
28
global . URL = URL
20
29
global . browser = browser
21
- browser . runtime . getURL . withArgs ( '/' ) . returns ( 'moz-extension://0f334731-19e3-42f8-85e2-03dbf50026df/' )
22
30
} )
23
31
24
32
beforeEach ( async function ( ) {
25
33
state = initState ( optionDefaults )
26
- const getState = ( ) => state
34
+ getState = ( ) => state
27
35
dnslinkResolver = createDnslinkResolver ( getState )
28
36
runtime = Object . assign ( { } , await createRuntimeChecks ( browser ) ) // make it mutable for tests
29
37
ipfsPathValidator = createIpfsPathValidator ( getState , dnslinkResolver )
@@ -47,7 +55,13 @@ describe('modifyRequest processing', function () {
47
55
} )
48
56
49
57
describe ( 'a request to <apiURL>/api/v0/ with Origin=moz-extension://{extension-installation-id}' , function ( ) {
50
- it ( 'should remove Origin header ' , function ( ) {
58
+ it ( 'should remove Origin header with moz-extension://' , async function ( ) {
59
+ // set vendor-specific Origin for WebExtension context
60
+ browser . runtime . getURL . withArgs ( '/' ) . returns ( 'moz-extension://0f334731-19e3-42f8-85e2-03dbf50026df/' )
61
+ // ensure clean modifyRequest
62
+ runtime = Object . assign ( { } , await createRuntimeChecks ( browser ) ) // make it mutable for tests
63
+ modifyRequest = createRequestModifier ( getState , dnslinkResolver , ipfsPathValidator , runtime )
64
+ // test
51
65
const bogusOriginHeader = { name : 'Origin' , value : 'moz-extension://0f334731-19e3-42f8-85e2-03dbf50026df' }
52
66
const request = {
53
67
requestHeaders : [ bogusOriginHeader ] ,
@@ -60,8 +74,34 @@ describe('modifyRequest processing', function () {
60
74
} )
61
75
} )
62
76
77
+ describe ( 'a request to <apiURL>/api/v0/ with Origin=chrome-extension://{extension-installation-id}' , function ( ) {
78
+ it ( 'should remove Origin header with chrome-extension://' , async function ( ) {
79
+ // set vendor-specific Origin for WebExtension context
80
+ browser . runtime . getURL . withArgs ( '/' ) . returns ( 'chrome-extension://trolrorlrorlrol/' )
81
+ // ensure clean modifyRequest
82
+ runtime = Object . assign ( { } , await createRuntimeChecks ( browser ) ) // make it mutable for tests
83
+ modifyRequest = createRequestModifier ( getState , dnslinkResolver , ipfsPathValidator , runtime )
84
+ // test
85
+ const bogusOriginHeader = { name : 'Origin' , value : 'chrome-extension://trolrorlrorlrol' }
86
+ const request = {
87
+ requestHeaders : [ bogusOriginHeader ] ,
88
+ type : 'xmlhttprequest' ,
89
+ url : `${ state . apiURLString } api/v0/id`
90
+ }
91
+ modifyRequest . onBeforeRequest ( request ) // executes before onBeforeSendHeaders, may mutate state
92
+ expect ( modifyRequest . onBeforeSendHeaders ( request ) . requestHeaders ) . to . not . include ( bogusOriginHeader )
93
+ browser . runtime . getURL . flush ( )
94
+ } )
95
+ } )
96
+
63
97
describe ( 'a request to <apiURL>/api/v0/ with Origin=null' , function ( ) {
64
- it ( 'should remove Origin header ' , function ( ) {
98
+ it ( 'should remove Origin header ' , async function ( ) {
99
+ // set vendor-specific Origin for WebExtension context
100
+ browser . runtime . getURL . withArgs ( '/' ) . returns ( undefined )
101
+ // ensure clean modifyRequest
102
+ runtime = Object . assign ( { } , await createRuntimeChecks ( browser ) ) // make it mutable for tests
103
+ modifyRequest = createRequestModifier ( getState , dnslinkResolver , ipfsPathValidator , runtime )
104
+ // test
65
105
const bogusOriginHeader = { name : 'Origin' , value : 'null' }
66
106
const request = {
67
107
requestHeaders : [ bogusOriginHeader ] ,
@@ -70,6 +110,7 @@ describe('modifyRequest processing', function () {
70
110
}
71
111
modifyRequest . onBeforeRequest ( request ) // executes before onBeforeSendHeaders, may mutate state
72
112
expect ( modifyRequest . onBeforeSendHeaders ( request ) . requestHeaders ) . to . not . include ( bogusOriginHeader )
113
+ browser . runtime . getURL . flush ( )
73
114
} )
74
115
} )
75
116
0 commit comments