Commit fa866ccb authored by Kushal Pandya's avatar Kushal Pandya

Merge branch 'respect-user-do-not-track' into 'master'

Add logic for respecting browser DNT setting

See merge request gitlab-org/gitlab-ce!32030
parents e12f7fe0 ca9598c1
...@@ -15,8 +15,14 @@ const extractData = (el, opts = {}) => { ...@@ -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', () => { ...@@ -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', () => { ...@@ -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', () => {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment