From 6cf0c98be95bd4e5e68d4d9193b10f721eb5670d Mon Sep 17 00:00:00 2001 From: Sam Macbeth Date: Thu, 19 Nov 2020 12:06:12 +0100 Subject: [PATCH 1/4] Set browser version for desktop --- src/classes/Globals.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/classes/Globals.js b/src/classes/Globals.js index 04dde28f3..8279f8ca4 100644 --- a/src/classes/Globals.js +++ b/src/classes/Globals.js @@ -198,6 +198,7 @@ class Globals { this.BROWSER_INFO.displayName = 'Ghostery Desktop Browser'; this.BROWSER_INFO.name = 'ghostery_desktop'; this.BROWSER_INFO.token = 'gd'; + this.BROWSER_INFO.version = info.version; } this.BROWSER_INFO.version = info.version; } From a35d180583e739d3da3e9408f2119b18eb170428 Mon Sep 17 00:00:00 2001 From: Sam Macbeth Date: Thu, 19 Nov 2020 13:54:28 +0100 Subject: [PATCH 2/4] Default search engine metric for Ghostery browser --- .eslintrc.js | 1 + src/classes/Metrics.js | 34 +++++++++++++++++++++++++++++----- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 5417bdc63..2532a680b 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -21,6 +21,7 @@ module.exports = { extends: 'airbnb', globals: { chrome: true, + browser: true, t: true, Atomics: 'readonly', SharedArrayBuffer: 'readonly', diff --git a/src/classes/Metrics.js b/src/classes/Metrics.js index d28c8a5c3..cb2120b40 100644 --- a/src/classes/Metrics.js +++ b/src/classes/Metrics.js @@ -190,9 +190,9 @@ class Metrics { * Set uninstall url * @param {string} conf key being changed */ - setUninstallUrl(key) { + async setUninstallUrl(key) { if (typeof chrome.runtime.setUninstallURL === 'function' && (!key || METRICS_URL_SET.has(key))) { - const metrics_url = this._buildMetricsUrl('uninstall'); + const metrics_url = await this._buildMetricsUrl('uninstall'); if (metrics_url.length) { chrome.runtime.setUninstallURL(metrics_url); } @@ -220,7 +220,7 @@ class Metrics { * @param {string} frequency ping frequency * @return {string} complete telemetry url */ - _buildMetricsUrl(type, frequency) { + async _buildMetricsUrl(type, frequency) { const frequencyString = (type !== 'uninstall') ? `/${frequency}` : ''; let metrics_url = `${METRICS_BASE_URL}/${type}${frequencyString}?gr=-1`; @@ -309,6 +309,12 @@ class Metrics { this._buildQueryPair('uc', this.utm_campaign); } + if (BROWSER_INFO.token === 'gd') { + metrics_url += + // default search + this._buildQueryPair('ds', await Metrics._getDefaultSearchEngine()); + } + return metrics_url; } @@ -335,10 +341,10 @@ class Metrics { }; } - frequencies.forEach((frequency) => { + frequencies.forEach(async(frequency) => { if (this._checkPing(type, frequency)) { const timeNow = Number((new Date()).getTime()); - const metrics_url = this._buildMetricsUrl(type, frequency); + const metrics_url = await this._buildMetricsUrl(type, frequency); // update Conf timestamps for each ping type and frequency const metrics = conf.metrics || {}; metrics[`${type}_${frequency}`] = timeNow; @@ -668,6 +674,24 @@ class Metrics { flag = !flag; }, FREQUENCIES.biweekly); } + + static async _getDefaultSearchEngine() { + // search API is only available in Ghostery browser where this permission is added to the manifest. + if (typeof browser !== 'undefined' && browser.search) { + // limit engines we can send to the specific set we're interested in from search choice screen + const searchEngines = { + 'Ghostery Search': 'ghost', + Google: 'google', + Bing: 'bing', + StartPage: 'sp', + Yahoo: 'yahoo', + }; + const engines = await browser.search.get(); + const defaultSearchEngine = engines.find(s => s.isDefault).name; + return searchEngines[defaultSearchEngine] || 'other'; + } + return ''; + } } // return the class as a singleton From e8b85b22ba2618948d6aa1e8e71cb5fc5eac6a39 Mon Sep 17 00:00:00 2001 From: Sam Macbeth Date: Thu, 19 Nov 2020 14:59:57 +0100 Subject: [PATCH 3/4] Fetch search metrics from search extension --- .eslintrc.js | 1 - src/classes/Metrics.js | 30 +++++++++++------------------- 2 files changed, 11 insertions(+), 20 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 2532a680b..5417bdc63 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -21,7 +21,6 @@ module.exports = { extends: 'airbnb', globals: { chrome: true, - browser: true, t: true, Atomics: 'readonly', SharedArrayBuffer: 'readonly', diff --git a/src/classes/Metrics.js b/src/classes/Metrics.js index cb2120b40..e1138af4f 100644 --- a/src/classes/Metrics.js +++ b/src/classes/Metrics.js @@ -310,9 +310,11 @@ class Metrics { } if (BROWSER_INFO.token === 'gd') { - metrics_url += - // default search - this._buildQueryPair('ds', await Metrics._getDefaultSearchEngine()); + // fetch metrics from the search extension and append them + const searchMetrics = await Metrics._getSearchExtensionMetrics(); + Object.keys(searchMetrics).forEach((k) => { + metrics_url += this._buildQueryPair(k, searchMetrics[k]); + }); } return metrics_url; @@ -675,22 +677,12 @@ class Metrics { }, FREQUENCIES.biweekly); } - static async _getDefaultSearchEngine() { - // search API is only available in Ghostery browser where this permission is added to the manifest. - if (typeof browser !== 'undefined' && browser.search) { - // limit engines we can send to the specific set we're interested in from search choice screen - const searchEngines = { - 'Ghostery Search': 'ghost', - Google: 'google', - Bing: 'bing', - StartPage: 'sp', - Yahoo: 'yahoo', - }; - const engines = await browser.search.get(); - const defaultSearchEngine = engines.find(s => s.isDefault).name; - return searchEngines[defaultSearchEngine] || 'other'; - } - return ''; + static async _getSearchExtensionMetrics() { + return new Promise((resolve) => { + chrome.runtime.sendMessage('search@ghostery.com', 'getMetrics', (response) => { + resolve(response || {}); + }); + }); } } From 7b3d9a0f1f97bb9429629fac2a443148436c2247 Mon Sep 17 00:00:00 2001 From: Sam Macbeth Date: Fri, 20 Nov 2020 09:10:18 +0100 Subject: [PATCH 4/4] Strip separators from browser version number. --- src/classes/Globals.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/classes/Globals.js b/src/classes/Globals.js index 8279f8ca4..8c7a11582 100644 --- a/src/classes/Globals.js +++ b/src/classes/Globals.js @@ -194,13 +194,13 @@ class Globals { this.BROWSER_INFO.name = 'ghostery_android'; this.BROWSER_INFO.token = 'ga'; this.BROWSER_INFO.os = 'android'; + this.BROWSER_INFO.version = info.version; } else { this.BROWSER_INFO.displayName = 'Ghostery Desktop Browser'; this.BROWSER_INFO.name = 'ghostery_desktop'; this.BROWSER_INFO.token = 'gd'; - this.BROWSER_INFO.version = info.version; + this.BROWSER_INFO.version = info.version.split('.').join(''); } - this.BROWSER_INFO.version = info.version; } }); }