8d3a7e8030
* Adds METRICS.md document in a new 'docs' subfolder. * Adds 'telemetry.js' background script which registers all events and provides a wrapper method to record events. * The event 'send_system_notice' was originally 'send_system_notification', however, that exceeded the [string length limit](https://firefox-source-docs.mozilla.org/toolkit/components/telemetry/telemetry/collection/events.html#limits) imposed by Event Telemetry. * There is no need to unregister the events, as the events are only registered for the duration of the [current Firefox session](https://dxr.mozilla.org/mozilla-central/source/toolkit/components/telemetry/core/nsITelemetry.idl#484). Note: This PR does not actually record any events. That will happen in subsequent PRs. For the setup here, I did confirm that I can successfully records events in 'about:telemetry#events-tab' once 'browser.telemetry.recordEvent' is called. This can be confirmed by adding `telemetry.recordEvent('badge_toolbar_button', 'toolbar_button', null, {badge_type: 'add'});` after `telemetry.init()` in './src/background/index.js'. |
||
---|---|---|
.circleci | ||
bin | ||
docs | ||
src | ||
.babelrc | ||
.eslintignore | ||
.eslintrc.json | ||
.gitignore | ||
.stylelintrc.json | ||
LICENSE | ||
Pipfile | ||
Pipfile.lock | ||
README.md | ||
package-lock.json | ||
package.json | ||
web-ext-config.js | ||
webpack.config.js | ||
webpack.config.test.js |
README.md
Commerce WebExtension
This repo contains the WebExtension for the Commerce project.
Developer Setup
Prerequisites:
- A recent version of Node.js and NPM
-
Clone the repository:
git clone https://github.com/mozilla/webext-commerce.git cd webext-commerce
-
Install dependencies:
npm install
-
Build the extension:
npm run build
-
Run the built extension in a test browser:
npm start
Running Tests
Automated tests are run in a Firefox browser instance using Marionette. We use the Python client for Marionette since there is no up-to-date JavaScript client.
To set up your environment for running the tests, you must have:
- A Firefox binary. On MacOS, this can be found within the
.app
folder atFirefox.app/Contents/MacOS/firefox
. - Python 2.7
- Pipenv
With these installed, you can set up the test suite:
-
Install Python dependencies:
pipenv install
-
Save the path to your Firefox binary with
npm
:npm config set webext-commerce:firefox_bin <PATH_TO_FIREFOX_BINARY>
After this, you can run pipenv run test
to run the automated test suite.
Scripts
Command | Description |
---|---|
npm start |
Launch Firefox with the extension temporarily installed |
npm run lint |
Run linting checks |
npm run build |
Compile source files with Webpack |
npm run watch |
Watch for changes and rebuild |
npm run package |
Package the extension into an XPI file |
pipenv run test |
Run test suite (See "Running Tests" for setup) |
Code Organization
src/background
contains the background scripts that trigger UI elements (such as the page action) and periodically check for price updates.src/browser_action
contains the toolbar popup for managing the list of currently-tracked products and tracking new products.src/extraction
contains the content scripts that extract product information from product web pages.src/state
contains the Redux-based code for managing global extension state.src/tests
contains the automated test suite.
Data Storage
Global state for the add-on is managed via Redux. Any time the data is changed, it is persisted to the add-on local storage.
Reducers, action creators, etc. are organized into ducks inside the src/state
directory.
License
The Commerce WebExtension is licensed under the MPL v2.0. See LICENSE
for details.