@@ -371,12 +371,7 @@ var onBeforeSendHeadersHandler = function(details) {
371371 // console.debug('onBeforeSendHeadersHandler()> "%s": %o', details.url, details);
372372
373373 var httpsb = HTTPSB ;
374-
375- // Do not ignore traffic outside tabs
376374 var tabId = details . tabId ;
377- if ( tabId < 0 ) {
378- tabId = httpsb . behindTheSceneTabId ;
379- }
380375
381376 // Re-classify orphan HTTP requests as behind-the-scene requests. There is
382377 // not much else which can be done, because there are URLs
@@ -391,58 +386,70 @@ var onBeforeSendHeadersHandler = function(details) {
391386 pageStats = httpsb . pageStatsFromTabId ( tabId ) ;
392387 }
393388
394- // Any cookie in there?
395- var httpsburi = httpsb . URI ;
396- var hostname = httpsburi . hostnameFromURI ( details . url ) ;
397- var pageURL = httpsb . pageUrlFromTabId ( tabId ) ;
398- var blacklistCookie = httpsb . blacklisted ( pageURL , 'cookie' , hostname ) ;
399- var processReferer = httpsb . userSettings . processReferer ;
389+ var pageURL = httpsb . pageUrlFromPageStats ( pageStats ) ;
390+ var reqHostname = httpsb . URI . hostnameFromURI ( details . url ) ;
391+ var changed = false ;
400392
401- if ( ! blacklistCookie && ! processReferer ) {
402- return ;
393+ if ( httpsb . blacklisted ( pageURL , 'cookie' , reqHostname ) ) {
394+ changed = foilCookieHeaders ( httpsb , details ) || changed ;
403395 }
404396
405- var headerName , fromDomain , toDomain ;
397+ if ( httpsb . userSettings . processReferer && httpsb . blacklisted ( pageURL , '*' , reqHostname ) ) {
398+ changed = foilRefererHeaders ( httpsb , reqHostname , details ) || changed ;
399+ }
400+
401+ if ( changed ) {
402+ // console.debug('onBeforeSendHeadersHandler()> CHANGED "%s": %o', details.url, details);
403+ return { requestHeaders : details . headers } ;
404+ }
405+ } ;
406+
407+ /******************************************************************************/
408+
409+ var foilCookieHeaders = function ( httpsb , details ) {
410+ var changed = false ;
406411 var headers = details . requestHeaders ;
412+ var header ;
407413 var i = headers . length ;
408- var changed = false ;
414+ while ( i -- ) {
415+ header = headers [ i ] ;
416+ if ( header . name . toLowerCase ( ) !== 'cookie' ) {
417+ continue ;
418+ }
419+ // console.debug('foilCookieHeaders()> foiled browser attempt to send cookie(s) to "%s"', details.url);
420+ headers . splice ( i , 1 ) ;
421+ httpsb . cookieHeaderFoiledCounter ++ ;
422+ changed = true ;
423+ }
424+ return changed ;
425+ } ;
426+
427+ /******************************************************************************/
409428
410- // I am no fan of deeply indented code paths, but for performance reasons
411- // I will tolerate it here. Thing is, here it is best to reuse as much
412- // already computed data as possible. (also, not sure if 'switch' would be
413- // a gain here, so far there is only two cases to treat).
429+ var foilRefererHeaders = function ( httpsb , toHostname , details ) {
430+ var changed = false ;
431+ var headers = details . requestHeaders ;
432+ var header ;
433+ var fromDomain , toDomain ;
434+ var i = headers . length ;
414435 while ( i -- ) {
415- headerName = headers [ i ] . name . toLowerCase ( ) ;
416- if ( headerName === 'referer' ) {
417- if ( processReferer ) {
418- fromDomain = httpsburi . domainFromURI ( headers [ i ] . value ) ;
419- toDomain = httpsburi . domainFromHostname ( hostname ) ;
420- if ( fromDomain !== toDomain ) {
421- if ( httpsb . blacklisted ( pageURL , '*' , hostname ) ) {
422- // console.debug('onBeforeSendHeadersHandler()> nulling referer "%s" for "%s"', fromDomain, toDomain);
423- headers [ i ] . value = '' ;
424- httpsb . refererHeaderFoiledCounter ++ ;
425- changed = true ;
426- }
427- }
428- }
436+ header = headers [ i ] ;
437+ if ( header . name . toLowerCase ( ) !== 'referer' ) {
429438 continue ;
430439 }
431- if ( headerName === 'cookie' ) {
432- if ( blacklistCookie ) {
433- // console.debug('HTTP Switchboard > foiled browser attempt to send cookie(s) to %o', details);
434- headers . splice ( i , 1 ) ;
435- httpsb . cookieHeaderFoiledCounter ++ ;
436- changed = true ;
437- }
440+ fromDomain = httpsb . URI . domainFromURI ( header . value ) ;
441+ if ( ! toDomain ) {
442+ toDomain = httpsb . URI . domainFromHostname ( toHostname ) ;
443+ }
444+ if ( toDomain === fromDomain ) {
438445 continue ;
439446 }
447+ // console.debug('foilRefererHeaders()> nulling referer "%s" for "%s"', fromDomain, toDomain);
448+ headers [ i ] . value = '' ;
449+ httpsb . refererHeaderFoiledCounter ++ ;
450+ changed = true ;
440451 }
441-
442- if ( changed ) {
443- // console.debug('onBeforeSendHeadersHandler()> CHANGED "%s": %o', details.url, details);
444- return { requestHeaders : headers } ;
445- }
452+ return changed ;
446453} ;
447454
448455/******************************************************************************/
0 commit comments