No description, website, or topics provided.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
src
.gitignore
LICENSE
package-lock.json
package.json v0.0.8 Feb 8, 2019
readme.md
tsconfig.json

readme.md

WebExtension Emulator

This library emulates the environment of a WebExtension inside a NodeJS VM. This enables:

  • Profiling and testing of the extension separately from a browser, and without the overheads of browser instrumentation.
  • Use node profiling tools to analyse extension performance
  • Generate synthetic extension benchmarks which run quickly.

This project is in the early stages, and most extension APIs only contain the minimum to allow an extension to run. We will be building out support for benchmarks of common patterns for testing our own extensions.

Usage

The following code loads a webextension inside the emulator and runs it for 10s. After this time we print a basic report of the extension run, including:

  • Resources loaded (both internal fetch and external webrequest), plus their sizes.
  • Amount of data saved in chrome.storage and how often it was written to.
  • The number of timers still registered after unloading the extension.
import Emulator from '@cliqz/webextension-emulator'
const sandbox = new Emulator('/path/to/webextension', {
  injectWebextensionPolyfill: true, // creates `browser` global with promisified APIs
  chromeStoragePath: './storage', // where to save chrome.storage data
  indexedDBPath: './idb', // where to save indexedDB data
  timeMultiplier: 1, // if virtual time should be modified
})
sandbox.createSandbox();
sandbox.startExtension();

setTimeout(() => {
  sandbox.stopExtension();
  sandbox.probeStorage();
  console.log(sandbox.probes);
}, 10000);

License

MIT.