Add logic for respecting browser DNT setting
This commit is contained in:
parent
e12f7fe062
commit
ca9598c1fb
|
@ -15,8 +15,14 @@ const extractData = (el, opts = {}) => {
|
||||||
};
|
};
|
||||||
|
|
||||||
export default class Tracking {
|
export default class Tracking {
|
||||||
|
static trackable() {
|
||||||
|
return !['1', 'yes'].includes(
|
||||||
|
window.doNotTrack || navigator.doNotTrack || navigator.msDoNotTrack,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
static enabled() {
|
static enabled() {
|
||||||
return typeof window.snowplow === 'function';
|
return typeof window.snowplow === 'function' && this.trackable();
|
||||||
}
|
}
|
||||||
|
|
||||||
static event(category = document.body.dataset.page, event = 'generic', data = {}) {
|
static event(category = document.body.dataset.page, event = 'generic', data = {}) {
|
||||||
|
|
|
@ -15,6 +15,12 @@ describe('Tracking', () => {
|
||||||
snowplowSpy = jest.spyOn(window, 'snowplow');
|
snowplowSpy = jest.spyOn(window, 'snowplow');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
window.doNotTrack = undefined;
|
||||||
|
navigator.doNotTrack = undefined;
|
||||||
|
navigator.msDoNotTrack = undefined;
|
||||||
|
});
|
||||||
|
|
||||||
it('tracks to snowplow (our current tracking system)', () => {
|
it('tracks to snowplow (our current tracking system)', () => {
|
||||||
Tracking.event('_category_', '_eventName_', { label: '_label_' });
|
Tracking.event('_category_', '_eventName_', { label: '_label_' });
|
||||||
|
|
||||||
|
@ -31,6 +37,27 @@ describe('Tracking', () => {
|
||||||
|
|
||||||
expect(snowplowSpy).not.toHaveBeenCalled();
|
expect(snowplowSpy).not.toHaveBeenCalled();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('skips tracking if the user does not want to be tracked (general spec)', () => {
|
||||||
|
window.doNotTrack = '1';
|
||||||
|
Tracking.event('_category_', '_eventName_');
|
||||||
|
|
||||||
|
expect(snowplowSpy).not.toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('skips tracking if the user does not want to be tracked (firefox legacy)', () => {
|
||||||
|
navigator.doNotTrack = 'yes';
|
||||||
|
Tracking.event('_category_', '_eventName_');
|
||||||
|
|
||||||
|
expect(snowplowSpy).not.toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('skips tracking if the user does not want to be tracked (IE legacy)', () => {
|
||||||
|
navigator.msDoNotTrack = '1';
|
||||||
|
Tracking.event('_category_', '_eventName_');
|
||||||
|
|
||||||
|
expect(snowplowSpy).not.toHaveBeenCalled();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('tracking interface events', () => {
|
describe('tracking interface events', () => {
|
||||||
|
|
Loading…
Reference in New Issue