Skip to content
This repository was archived by the owner on Nov 15, 2017. It is now read-only.

Commit 3cff794

Browse files
committed
simplify onBeforeSendHeadersHandler using helpers
1 parent 1fe897d commit 3cff794

File tree

1 file changed

+52
-45
lines changed

1 file changed

+52
-45
lines changed

js/traffic.js

Lines changed: 52 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)