@@ -6,19 +6,38 @@ var XSS = (() => {
66
77 let workersMap = new Map ( ) ;
88 let promptsMap = new Map ( ) ;
9+ let blockedTabs = new Map ( ) ;
910
1011 let requestIdCount = 0 ;
1112
1213 async function getUserResponse ( xssReq ) {
13- let { originKey} = xssReq ;
14+ let { originKey, request} = xssReq ;
15+ let { tabId, frameId} = request ;
16+ let { browserAction} = browser ;
17+ if ( frameId === 0 ) {
18+ if ( blockedTabs . has ( tabId ) ) {
19+ blockedTabs . delete ( tabId ) ;
20+ if ( "setBadgeText" in browserAction ) {
21+ browserAction . setBadgeText ( { tabId, text : "" } ) ;
22+ }
23+ }
24+ }
1425 await promptsMap . get ( originKey ) ;
15- // promptsMap.delete(originKey);
26+
1627 switch ( await XSS . getUserChoice ( originKey ) ) {
1728 case "allow" :
1829 return ALLOW ;
1930 case "block" :
2031 log ( "Blocking request from %s to %s by previous XSS prompt user choice" ,
2132 xssReq . srcUrl , xssReq . destUrl ) ;
33+
34+ if ( "setBadgeText" in browserAction ) {
35+ browserAction . setBadgeText ( { tabId, text : "XSS" } ) ;
36+ browserAction . setBadgeBackgroundColor ( { tabId, color : [ 0 , 0 , 128 , 160 ] } ) ;
37+ }
38+ let keys = blockedTabs . get ( tabId ) ;
39+ if ( ! keys ) blockedTabs . set ( tabId , keys = new Set ( ) ) ;
40+ keys . add ( originKey ) ;
2241 return ABORT ;
2342 }
2443 return null ;
@@ -215,7 +234,7 @@ var XSS = (() => {
215234
216235 let isGet = method === "GET" ;
217236 return {
218- unparsedRequest : request ,
237+ request,
219238 srcUrl,
220239 destUrl,
221240 srcObj,
@@ -247,14 +266,18 @@ var XSS = (() => {
247266 return this . _userChoices [ originKey ] ;
248267 } ,
249268
269+ getBlockedInTab ( tabId ) {
270+ return blockedTabs . has ( tabId ) ? [ ...blockedTabs . get ( tabId ) ] : null ;
271+ } ,
272+
250273 async maybe ( xssReq ) { // return reason or null if everything seems fine
251274 if ( await this . Exceptions . shouldIgnore ( xssReq ) ) {
252275 return null ;
253276 }
254277
255278 let skip = this . Exceptions . partial ( xssReq ) ;
256279 let worker = new Worker ( browser . runtime . getURL ( "/xss/InjectionCheckWorker.js" ) ) ;
257- let { requestId} = xssReq . unparsedRequest ;
280+ let { requestId} = xssReq . request ;
258281 workersMap . set ( requestId , worker )
259282 return await new Promise ( ( resolve , reject ) => {
260283 worker . onmessage = e => {
@@ -282,7 +305,7 @@ var XSS = (() => {
282305 let onNavError = details => {
283306 debug ( "Navigation error: %o" , details ) ;
284307 let { tabId, frameId, url} = details ;
285- let r = xssReq . unparsedRequest ;
308+ let r = xssReq . request ;
286309 if ( tabId === r . tabId && frameId === r . frameId ) {
287310 cleanup ( ) ;
288311 reject ( new Error ( "Timing: request interrupted while being filtered, no need to go on." ) ) ;
0 commit comments