@@ -5,12 +5,40 @@ const { HttpServer } = ChromeUtils.importESModule(
5
5
) ;
6
6
7
7
function makeChannel ( url ) {
8
+ let uri2 = NetUtil . newURI ( url ) ;
9
+ // by default system principal is used, which cannot be used for permission based tests
10
+ // because the default system principal has all permissions
11
+ var principal = Services . scriptSecurityManager . createContentPrincipal (
12
+ uri2 ,
13
+ { }
14
+ ) ;
8
15
return NetUtil . newChannel ( {
9
16
uri : url ,
10
- loadUsingSystemPrincipal : true ,
17
+ loadingPrincipal : principal ,
18
+ securityFlags : Ci . nsILoadInfo . SEC_REQUIRE_SAME_ORIGIN_INHERITS_SEC_CONTEXT ,
19
+ contentPolicyType : Ci . nsIContentPolicy . TYPE_OTHER ,
11
20
} ) . QueryInterface ( Ci . nsIHttpChannel ) ;
12
21
}
13
22
23
+ var ChannelCreationObserver = {
24
+ QueryInterface : ChromeUtils . generateQI ( [ "nsIObserver" ] ) ,
25
+ observe ( aSubject , aTopic ) {
26
+ if ( aTopic == "http-on-opening-request" ) {
27
+ var chan = aSubject . QueryInterface ( Ci . nsIHttpChannel ) ;
28
+ if ( chan . URI . spec . includes ( "test_lna_social_tracker" ) ) {
29
+ chan . loadInfo . triggeringThirdPartyClassificationFlags =
30
+ Ci . nsIClassifiedChannel . CLASSIFIED_ANY_SOCIAL_TRACKING ;
31
+ } else if ( chan . URI . spec . includes ( "test_lna_basic_tracker" ) ) {
32
+ chan . loadInfo . triggeringThirdPartyClassificationFlags =
33
+ Ci . nsIClassifiedChannel . CLASSIFIED_ANY_BASIC_TRACKING ;
34
+ } else if ( chan . URI . spec . includes ( "test_lna_content_tracker" ) ) {
35
+ chan . loadInfo . triggeringThirdPartyClassificationFlags =
36
+ Ci . nsIClassifiedChannel . CLASSIFIED_TRACKING_CONTENT ;
37
+ }
38
+ }
39
+ } ,
40
+ } ;
41
+
14
42
ChromeUtils . defineLazyGetter ( this , "H1_URL" , function ( ) {
15
43
return "http://localhost:" + httpServer . identity . primaryPort ;
16
44
} ) ;
@@ -28,6 +56,8 @@ function pathHandler(metadata, response) {
28
56
}
29
57
30
58
add_setup ( async ( ) => {
59
+ Services . prefs . setBoolPref ( "network.lna.block_trackers" , true ) ;
60
+ Services . obs . addObserver ( ChannelCreationObserver , "http-on-opening-request" ) ;
31
61
// H1 Server
32
62
httpServer = new HttpServer ( ) ;
33
63
httpServer . registerPathHandler ( "/test_lna" , pathHandler ) ;
@@ -46,7 +76,7 @@ add_setup(async () => {
46
76
await httpServer . stop ( ) ;
47
77
} catch ( e ) {
48
78
// Ignore errors during cleanup
49
- console . error ( "Error during cleanup:" , e ) ;
79
+ info ( "Error during cleanup:" , e ) ;
50
80
}
51
81
} ) ;
52
82
await server . registerPathHandler ( "/test_lna" , ( req , resp ) => {
@@ -99,10 +129,63 @@ add_task(async function lna_blocking_tests() {
99
129
[ false , Ci . nsILoadInfo . Public , "/test_lna" , Cr . NS_OK , H2_URL ] ,
100
130
[ false , Ci . nsILoadInfo . Private , "/test_lna" , Cr . NS_OK , H2_URL ] ,
101
131
[ false , Ci . nsILoadInfo . Local , "/test_lna" , Cr . NS_OK , H2_URL ] ,
132
+ // Test cases for local network access from trackers
133
+ // NO LNA then request should not be blocked
134
+ [ false , Ci . nsILoadInfo . Local , "/test_lna_basic_tracker" , Cr . NS_OK , H2_URL ] ,
135
+ [ false , Ci . nsILoadInfo . Local , "/test_lna_social_tracker" , Cr . NS_OK , H2_URL ] ,
136
+ [
137
+ false ,
138
+ Ci . nsILoadInfo . Local ,
139
+ "/test_lna_content_tracker" ,
140
+ Cr . NS_OK ,
141
+ H2_URL ,
142
+ ] ,
143
+ [
144
+ false ,
145
+ Ci . nsILoadInfo . Public ,
146
+ "/test_lna_basic_tracker" ,
147
+ Cr . NS_ERROR_LOCAL_NETWORK_ACCESS_DENIED ,
148
+ H2_URL ,
149
+ ] ,
150
+ [
151
+ false ,
152
+ Ci . nsILoadInfo . Public ,
153
+ "/test_lna_social_tracker" ,
154
+ Cr . NS_ERROR_LOCAL_NETWORK_ACCESS_DENIED ,
155
+ H2_URL ,
156
+ ] ,
157
+ [
158
+ false ,
159
+ Ci . nsILoadInfo . Public ,
160
+ "/test_lna_content_tracker" ,
161
+ Cr . NS_OK ,
162
+ H2_URL ,
163
+ ] ,
164
+ [
165
+ false ,
166
+ Ci . nsILoadInfo . Private ,
167
+ "/test_lna_basic_tracker" ,
168
+ Cr . NS_ERROR_LOCAL_NETWORK_ACCESS_DENIED ,
169
+ H2_URL ,
170
+ ] ,
171
+ [
172
+ false ,
173
+ Ci . nsILoadInfo . Private ,
174
+ "/test_lna_social_tracker" ,
175
+ Cr . NS_ERROR_LOCAL_NETWORK_ACCESS_DENIED ,
176
+ H2_URL ,
177
+ ] ,
178
+ [
179
+ false ,
180
+ Ci . nsILoadInfo . Private ,
181
+ "/test_lna_content_tracker" ,
182
+ Cr . NS_OK ,
183
+ H2_URL ,
184
+ ] ,
102
185
] ;
103
186
104
187
for ( let [ blocking , space , suffix , expectedStatus , url ] of testCases ) {
105
- info ( `do_test ${ url } , ${ space } -> ${ expectedStatus } ` ) ;
188
+ info ( `do_test ${ url } ${ suffix } , ${ space } -> ${ expectedStatus } ` ) ;
106
189
107
190
Services . prefs . setBoolPref ( "network.lna.blocking" , blocking ) ;
108
191
0 commit comments