Skip to content
Study Addon for experiment to test methods of fingerprinting blocking
JavaScript WebAssembly Jupyter Notebook
Branch: master
Clone or download
Latest commit 21a19fc Dec 6, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
src Fixes #18 Dec 6, 2019
LICENSE Fixes #18 Dec 6, 2019
build.js Fixes #1 - Implements treatmentDomain Nov 21, 2019
environment.yaml Initial work, with functioning control branch Nov 11, 2019
web-ext-config.js Show browser console Nov 19, 2019
yarn.lock Stop extra blocking - rough cut Nov 17, 2019


Study Addon for experiment to test methods of fingerprinting blocking. For more information on the study see bugzilla.

The study has three branches:

  • control - maintaining current default fingerprinting protections
  • treatmentDomain - flips fingerprinting pref to default on ETP domain-based fingerprinting protection
  • treatmentScript - blocks specific fingerprinting scripts detected on the ETP fingerprinting domains. This branch uses code from the excellent uBlock Origin to perform the static network filtering. uBlock Origin attribution and license notes here including information of forking and modifications.




yarn install
yarn build

Install and run one of the built variants:

npx web-ext run -s dist/extension-control-0.1.0
npx web-ext run -s dist/extension-treatmentScript-0.1.0
npx web-ext run -s dist/extension-treatmentDomain-0.1.0

For the add-on to work, it must be used in a version of Firefox with the Normandy Studies web-extension APIs available. These should be available in Firefox 69 or above, starting with Nightly 2019-06-28. Additionally, it must be run on a pre-release build, such as Nightly, Dev-Edition, or an unbranded build, and the preference extensions.legacy.enabled must be set to true.

This add-on assumes it was installed by Normandy as a part of a study. To test this add-on without involving a Normandy server, run the code below in the Browser Console. This step can be done before or after the add-on is installed.

As far as I can tell, only addonId needs to match.

const { AddonStudies } = ChromeUtils.import(
await AddonStudies.add({
  recipeId: 2,
  slug: "FPBlock",
  userFacingName: "FPBlock",
  userFacingDescription: "Study Addon for FPBlock experiment",
  branch: "treatmentDomain",
  active: true,
  addonId: "",
  addonVersion: "0.6.0",
  extensionApiId: 1,
  extensionHash: "badhash",
  hashAlgorithm: "sha256",
  studyStartDate: new Date(),
  studyEndDate: null,
You can’t perform that action at this time.