Skip to content

Commit

Permalink
for #26: refactor: new getRequestEntity function
Browse files Browse the repository at this point in the history
Also, tests and coverage reporting!
  • Loading branch information
groovecoder committed Aug 11, 2016
1 parent 0cd241a commit 3909fe5
Show file tree
Hide file tree
Showing 6 changed files with 83 additions and 31 deletions.
3 changes: 3 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,6 @@ before_install:
script:
- npm run build
- npm run lint

after_success:
- npm run coveralls
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
# Blok

[![Build Status](https://travis-ci.org/mozilla/blok.svg?branch=master)](https://travis-ci.org/mozilla/blok)
[![Coverage
Status](https://coveralls.io/repos/github/mozilla/blok/badge.svg)](https://coveralls.io/github/mozilla/blok)

[Web Extension](https://developer.mozilla.org/en-US/Add-ons/WebExtensions/) re-implementation of [Tracking Protection for Firefox](https://support.mozilla.org/en-US/kb/tracking-protection-pbm).

Expand Down Expand Up @@ -59,4 +61,4 @@ Requires node 6+
To distribute, you will need AMO access credentials. See the `web-ext` docs.

1. Use [`web-ext
sign`](https://developer.mozilla.org/en-US/Add-ons/WebExtensions/web-ext_command_reference#web-ext_sign)
sign`](https://developer.mozilla.org/en-US/Add-ons/WebExtensions/web-ext_command_reference#web-ext_sign)
36 changes: 10 additions & 26 deletions js/background.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
var {canonicalizeHost} = require('./canonicalize')
const {loadLists, hostInBlocklist, hostInEntity} = require('./lists')
const {requestAllower} = require('./requests')
const {loadLists, hostInBlocklist} = require('./lists')
const {requestAllower, getRequestEntity} = require('./requests')
const {log} = require('./log')

var currentActiveTabID
Expand Down Expand Up @@ -30,7 +30,7 @@ function blockTrackerRequests (blocklist, allowedHosts, entityList) {
var requestTabID = requestDetails.tabId
var originTopHost
var requestTopHost
var requestEntityName
var requestEntity

var flags = {
currentOriginDisabled: false,
Expand Down Expand Up @@ -83,25 +83,9 @@ function blockTrackerRequests (blocklist, allowedHosts, entityList) {
}
log(`requestTopHost: ${requestTopHost} does not match originTopHost: ${originTopHost}...`)

for (let entityName in entityList) {
var entity = entityList[entityName]
var requestIsEntityResource = false
var originIsEntityProperty = false
var mainFrameOriginIsEntityProperty = false

requestIsEntityResource = hostInEntity(entity.resources, requestTopHost)
if (requestIsEntityResource) {
requestEntityName = entityName
}

originIsEntityProperty = hostInEntity(entity.properties, originTopHost)

mainFrameOriginIsEntityProperty = hostInEntity(entity.properties, mainFrameOriginTopHosts[requestTabID])

if ((originIsEntityProperty || mainFrameOriginIsEntityProperty) && requestIsEntityResource) {
log(`originTopHost ${originTopHost} and resource requestTopHost ${requestTopHost} belong to the same entity: ${entityName}; allowing request`)
return allowRequest()
}
requestEntity = getRequestEntity(entityList, originTopHost, requestTopHost, mainFrameOriginTopHosts[requestTabID])
if (requestEntity.sameEntity) {
return allowRequest()
}

// Allow request if the origin has been added to allowedHosts
Expand All @@ -115,15 +99,15 @@ function blockTrackerRequests (blocklist, allowedHosts, entityList) {
}
)
allowedRequests[requestTabID].push(requestTopHost)
if (allowedEntities[requestTabID].indexOf(requestEntityName) === -1) {
allowedEntities[requestTabID].push(requestEntityName)
if (allowedEntities[requestTabID].indexOf(requestEntity.entityName) === -1) {
allowedEntities[requestTabID].push(requestEntity.entityName)
}
return allowRequest()
}

blockedRequests[requestTabID].push(requestTopHost)
if (blockedEntities[requestTabID].indexOf(requestEntityName) === -1) {
blockedEntities[requestTabID].push(requestEntityName)
if (blockedEntities[requestTabID].indexOf(requestEntity.entityName) === -1) {
blockedEntities[requestTabID].push(requestEntity.entityName)
}

totalExecTime[requestTabID] += Date.now() - blockTrackerRequestsStart
Expand Down
32 changes: 31 additions & 1 deletion js/requests.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,38 @@
const {log} = require('./log')
const {hostInEntity} = require('./lists')

function requestAllower (tabID, totalExecTime, startDateTime) {
totalExecTime[tabID] += Date.now() - startDateTime
return {}
}

function getRequestEntity (entityList, originTopHost, requestTopHost, mainFrameOriginTopHost) {
var requestEntityName
let sameEntity = false
for (let entityName in entityList) {
var entity = entityList[entityName]
var requestIsEntityResource = false
var originIsEntityProperty = false
var mainFrameOriginIsEntityProperty = false

requestIsEntityResource = hostInEntity(entity.resources, requestTopHost)
if (requestIsEntityResource) {
requestEntityName = entityName
}

originIsEntityProperty = hostInEntity(entity.properties, originTopHost)

mainFrameOriginIsEntityProperty = hostInEntity(entity.properties, mainFrameOriginTopHost)

if ((originIsEntityProperty || mainFrameOriginIsEntityProperty) && requestIsEntityResource) {
log(`originTopHost ${originTopHost} and resource requestTopHost ${requestTopHost} belong to the same entity: ${entityName}; allowing request`)
sameEntity = true
}
}
return {'entityName': requestEntityName, 'sameEntity': sameEntity}
}

module.exports = {
requestAllower
requestAllower,
getRequestEntity
}
8 changes: 8 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
"build": "npm test && MODE=production npm run bundle && web-ext build",
"build-dev": "npm test && MODE=dev npm run bundle && web-ext build",
"coverage": "nyc npm test",
"coveralls": "nyc npm test && nyc report --reporter=text-lcov | coveralls",
"firefox": "npm run bundle && web-ext run",
"lint": "standard && web-ext lint",
"postinstall": "cp ./node_modules/foundation-sites/dist/foundation.min.css ./css/foundation.min.css",
Expand All @@ -35,6 +36,7 @@
"homepage": "https://github.com/mozilla/blok#readme",
"devDependencies": {
"browserify": "13.0.1",
"coveralls": "2.11.12",
"envify": "3.4.1",
"faucet": "0.0.1",
"foundation-sites": "6.2.3",
Expand All @@ -44,6 +46,12 @@
"tape": "4.6.0",
"web-ext": "1.4.0"
},
"nyc": {
"all": true,
"exclude": [
"**/*.bundle.js"
]
},
"standard": {
"globals": [
"BroadcastChannel",
Expand Down
31 changes: 28 additions & 3 deletions tests/test-requests.js
Original file line number Diff line number Diff line change
@@ -1,19 +1,44 @@
var test = require('tape')
var {allowRequest} = require('../js/requests')
var {requestAllower, getRequestEntity} = require('../js/requests')

var entityListFixtureData = require('./entitylist-fixture.json')

test('allowRequest returns {}', (t) => {
t.plan(1)
let tabID = 1
let totalExecTime = {}
totalExecTime[tabID] = 0
t.deepEqual(allowRequest(tabID, totalExecTime, Date.now()), {})
var allowRequest = requestAllower.bind(null, tabID, totalExecTime, Date.now())
t.deepEqual(allowRequest(), {})
})

test('allowRequest adds some ms to totalExecTime[tabID]', (t) => {
t.plan(1)
let tabID = 1
let totalExecTime = {}
totalExecTime[tabID] = 0
allowRequest(tabID, totalExecTime, 0)
var allowRequest = requestAllower.bind(null, tabID, totalExecTime, 0)
allowRequest()
t.ok(totalExecTime[tabID] > 0, 'added ms to totalExecTime[tabID]')
})

test('getRequestEntity request to google.com from facebook.com returns Google and false', (t) => {
t.plan(2)
let requestEntity = getRequestEntity(entityListFixtureData, 'facebook.com', 'google.com', 'facebook.com')
t.equal(requestEntity.entityName, 'Google')
t.notOk(requestEntity.sameEntity)
})

test('getRequestEntity request to facebook.com from instagram.com returns Facebook and true', (t) => {
t.plan(2)
let requestEntity = getRequestEntity(entityListFixtureData, 'instagram.com', 'facebook.com', 'instagram.com')
t.equal(requestEntity.entityName, 'Facebook')
t.ok(requestEntity.sameEntity)
})

test('getRequestEntity request to facebook.com from github.io iframe on facebook.com returns Facebook and true', (t) => {
t.plan(2)
let requestEntity = getRequestEntity(entityListFixtureData, 'githhub.io', 'facebook.com', 'facebook.com')
t.equal(requestEntity.entityName, 'Facebook')
t.ok(requestEntity.sameEntity)
})

0 comments on commit 3909fe5

Please sign in to comment.