Skip to content
This repository was archived by the owner on Jan 6, 2023. It is now read-only.

Commit b5df794

Browse files
authoredMar 8, 2019
Merge pull request #1455 from mozilla/rm-ga
Remove Google Analytics from WebExtension
2 parents e46e95a + be47ca7 commit b5df794

8 files changed

+6
-174
lines changed
 

‎.taskcluster.yml

-41
This file was deleted.

‎CHANGELOG.md

+4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Changelog
22

3+
## 4.3.4
4+
5+
* Remove Google Analytics from WebExtension
6+
37
## 4.3.3
48

59
* Version bump for auto update

‎package-lock.json

-5
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎package.json

-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@
4242
"react-router-dom": "4.2.2",
4343
"redux": "3.7.2",
4444
"redux-thunk": "2.2.0",
45-
"testpilot-ga": "^0.2.1",
4645
"uuid": "^3.2.1"
4746
},
4847
"devDependencies": {

‎scripts/postinstall.js

-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
const { copySync } = require('fs-extra');
44

55
const files = [
6-
copySync('node_modules/testpilot-ga/dist/index.js', 'src/vendor/testpilot-ga.js'),
76
copySync('node_modules/kinto-http/dist/kinto-http.min.js', 'src/vendor/kinto-http.js'),
87
copySync('node_modules/kinto-http/LICENSE', 'src/vendor/kinto-http.LICENSE'),
98
copySync('node_modules/kinto/dist/kinto.noshim.js', 'src/vendor/kinto.js'),

‎src/background.js

+1-121
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,9 @@
1-
/**
2-
* Google Analytics / TestPilot Metrics
3-
*/
4-
const TRACKING_ID = 'UA-35433268-79';
51
const KINTO_SERVER = 'https://testpilot.settings.services.mozilla.com/v1';
62
// XXX: Read this from Kinto fxa-params
73
const FXA_CLIENT_ID = 'a3dbd8c5a6fd93e2';
84
const FXA_OAUTH_SERVER = 'https://oauth.accounts.firefox.com/v1';
95
const FXA_PROFILE_SERVER = 'https://profile.accounts.firefox.com/v1';
106
const FXA_SCOPES = ['profile', 'https://identity.mozilla.com/apps/notes'];
11-
const timeouts = {};
12-
let closeUI = null;
137
let isEditorReady = false;
148
let editorConnectedDeferred;
159
let isEditorConnected = new Promise(resolve => { editorConnectedDeferred = {resolve}; });
@@ -19,86 +13,6 @@ const client = new Kinto({remote: KINTO_SERVER, bucket: 'default'});
1913
// Used by sync to load only changes from lastModified timestamp.
2014
let lastSyncTimestamp = null; // eslint-disable-line no-unused-vars
2115

22-
// Analytics
23-
const analytics = new TestPilotGA({
24-
tid: TRACKING_ID,
25-
ds: 'addon',
26-
an: 'Notes Experiment',
27-
aid: 'notes@mozilla.com',
28-
av: browser.runtime.getManifest().version
29-
});
30-
31-
// This object is updated onMessage 'redux', sended by sidebar store.js on every change.
32-
// We need to keep it to generate `cd10`
33-
let reduxState = {};
34-
35-
function sendMetrics(event, context = {}, state = reduxState) {
36-
37-
// This function debounce sending metrics.
38-
const later = function() {
39-
timeouts[event] = null;
40-
41-
let metrics = {};
42-
43-
if (event === 'open') {
44-
metrics.cd9 = context.loaded !== false;
45-
} else if (event === 'close') {
46-
metrics.cd7 = context.closeUI;
47-
metrics.cd8 = null; // reason editing session ended
48-
} else if (event === 'changed' || event === 'drag-n-drop') { // Editing
49-
metrics = {
50-
cm1: context.characters,
51-
cm2: context.lineBreaks,
52-
cm3: null, // Size of the change
53-
cd1: context.syncEnabled,
54-
cd2: context.usesSize,
55-
cd3: context.usesBold,
56-
cd4: context.usesItalics,
57-
cd5: context.usesStrikethrough,
58-
cd6: context.usesList,
59-
};
60-
} else if (event === 'export') {
61-
metrics.el = 'html';
62-
} else if (event === 'new-note') {
63-
metrics.el = context.origin;
64-
} else if (event === 'delete-note') {
65-
metrics.el = context.origin;
66-
}
67-
68-
// Generate cd10 based on footer.js rules
69-
if (state.sync && ['open', 'close', 'changed', 'drag-n-drop', 'new-note', 'export',
70-
'delete-note', 'give-feedback', 'limit-reached'].includes(event)) {
71-
if (state.sync.email) { // If user is authenticated
72-
if (state.sync.error) {
73-
metrics.cd10 = 'error';
74-
} else if (state.sync.isSyncing) {
75-
metrics.cd10 = 'isSyncing';
76-
} else {
77-
metrics.cd10 = 'synced';
78-
}
79-
} else {
80-
if (state.sync.isOpeningLogin) { // eslint-disable-line no-lonely-if
81-
metrics.cd10 = 'openLogin';
82-
} else if (state.sync.isPleaseLogin) {
83-
metrics.cd10 = 'verifyAccount';
84-
} else if (state.sync.isReconnectSync) {
85-
metrics.cd10 = 'reconnectSync';
86-
} else {
87-
metrics.cd10 = 'signIn';
88-
}
89-
}
90-
}
91-
92-
if (state.notes) {
93-
metrics.cd11 = state.notes.length;
94-
}
95-
96-
return analytics.sendEvent('notes', event, metrics);
97-
};
98-
clearTimeout(timeouts[event]);
99-
timeouts[event] = setTimeout(later, 20000);
100-
}
101-
10216
function fetchProfile(credentials) {
10317
return fxaFetchProfile(FXA_PROFILE_SERVER, credentials.access_token).then((profile) => {
10418
browser.storage.local.set({credentials}).then(() => {
@@ -120,7 +34,6 @@ function authenticate() {
12034
redirectUri: browser.identity.getRedirectURL(),
12135
scopes: FXA_SCOPES,
12236
}).then((loginDetails) => {
123-
sendMetrics('login-success');
12437
lastSyncTimestamp = null;
12538
const key = loginDetails.keys['https://identity.mozilla.com/apps/notes'];
12639
const credentials = {
@@ -141,7 +54,6 @@ function authenticate() {
14154
chrome.runtime.sendMessage({
14255
action: 'reconnect'
14356
});
144-
sendMetrics('login-failed');
14557
});
14658
}
14759
browser.runtime.onMessage.addListener(function(eventData) {
@@ -152,7 +64,6 @@ browser.runtime.onMessage.addListener(function(eventData) {
15264
credentials.get()
15365
.then(result => {
15466
if (!result) {
155-
sendMetrics('webext-button-authenticate');
15667
authenticate();
15768
} else {
15869
chrome.runtime.sendMessage({
@@ -164,7 +75,6 @@ browser.runtime.onMessage.addListener(function(eventData) {
16475
break;
16576
case 'disconnected':
16677
disconnectFromKinto(client).then(() => {
167-
sendMetrics('webext-button-disconnect', eventData.context);
16878
credentials.clear();
16979
chrome.runtime.sendMessage({
17080
action: 'disconnected'
@@ -178,35 +88,16 @@ browser.runtime.onMessage.addListener(function(eventData) {
17888
notes: result.notes
17989
});
18090
}).catch((e) => {
181-
sendMetrics('open', {loaded: false});
91+
// nothing to do here
18292
});
18393
break;
18494
case 'kinto-sync':
18595
loadFromKinto(client, credentials);
18696
break;
187-
case 'metrics-changed':
188-
sendMetrics('changed', eventData.context);
189-
break;
190-
case 'metrics-drag-n-drop':
191-
sendMetrics('drag-n-drop', eventData.context);
192-
break;
193-
case 'metrics-reconnect-sync':
194-
sendMetrics('reconnect-sync', eventData.context);
195-
break;
196-
case 'metrics-limit-reached':
197-
sendMetrics('limit-reached', eventData.context);
198-
break;
199-
case 'metrics-export':
200-
sendMetrics('export');
201-
break;
202-
case 'metrics-give-feedback':
203-
sendMetrics('give-feedback');
204-
break;
20597
case 'editor-ready':
20698
isEditorReady = true;
20799
break;
208100
case 'create-note':
209-
sendMetrics('new-note', { origin: eventData.origin });
210101
// We create a note, and send id with note-created nessage
211102
createNote(client, credentials, {
212103
id: eventData.id,
@@ -223,7 +114,6 @@ browser.runtime.onMessage.addListener(function(eventData) {
223114
saveToKinto(client, credentials, eventData.note, eventData.from);
224115
break;
225116
case 'delete-note':
226-
sendMetrics('delete-note', { origin: eventData.origin });
227117
// We create a note, and send id with note-created nessage
228118
deleteNote(client, credentials, eventData.id).then(() => {
229119
// loadFromKinto(client, credentials);
@@ -234,14 +124,10 @@ browser.runtime.onMessage.addListener(function(eventData) {
234124
});
235125
break;
236126
case 'theme-changed':
237-
sendMetrics('theme-changed', eventData.content);
238127
browser.runtime.sendMessage({
239128
action: 'theme-changed'
240129
});
241130
break;
242-
case 'redux':
243-
reduxState = eventData.state;
244-
break;
245131
case 'fetch-email':
246132
credentials.get().then(received => {
247133
fetchProfile(received).catch(e => {
@@ -259,19 +145,15 @@ function connected(p) {
259145
checkIndexedDbHealth().then(() => {},
260146
(idbError) => {
261147
console.warn('idbError', idbError); // eslint-disable-line no-console
262-
sendMetrics('idb-fail');
263148
}
264149
);
265150

266-
sendMetrics('open', {loaded: true});
267-
closeUI = 'closeButton';
268151
editorConnectedDeferred.resolve();
269152

270153
p.onDisconnect.addListener(() => {
271154
// sidebar closed, therefore editor is not ready to receive any content
272155
isEditorConnected = new Promise(resolve => { editorConnectedDeferred = {resolve}; });
273156
isEditorReady = false;
274-
sendMetrics('close', {'closeUI': closeUI});
275157
});
276158
}
277159

@@ -308,8 +190,6 @@ browser.contextMenus.create({
308190

309191
browser.contextMenus.onClicked.addListener((info, tab) => {
310192

311-
sendMetrics('metrics-context-menu');
312-
313193
// open sidebar which will trigger `isEditorReady`...
314194
if (!isEditorReady) {
315195
browser.sidebarAction.open();

‎src/manifest.json

+1-3
Original file line numberDiff line numberDiff line change
@@ -32,16 +32,14 @@
3232
"permissions": [
3333
"contextMenus",
3434
"storage",
35-
"identity",
36-
"https://ssl.google-analytics.com/collect"
35+
"identity"
3736
],
3837
"background": {
3938
"scripts": [
4039
"vendor/jose.js",
4140
"vendor/kinto-http.js",
4241
"vendor/kinto.js",
4342
"vendor/fxa-crypto-relier/fxa-crypto-relier.js",
44-
"vendor/testpilot-ga.js",
4543
"utils.js",
4644
"fxa-utils.js",
4745
"sync.js",

‎src/sync.js

-2
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,6 @@ function syncKinto(client, credentials) {
263263
resolution.deleted = true;
264264
}
265265
client.conflict = true;
266-
sendMetrics('handle-conflict'); // eslint-disable-line no-undef
267266
}
268267
return collection.resolve(conflict, resolution);
269268
}))
@@ -337,7 +336,6 @@ function retrieveNote(client) {
337336
.then((list) => {
338337
// We delete all notes retrieved from server and not properly deleted
339338
Object.keys(deletedNotesStillOnServer).forEach((id) => {
340-
sendMetrics('delete-deleted-notes'); // eslint-disable-line no-undef
341339
client.collection('notes', { idSchema: notesIdSchema }).deleteAny(id);
342340
});
343341
return list;

0 commit comments

Comments
 (0)
This repository has been archived.