From 11d8b023f08bd972a0a4d106d2faea0bd95acc70 Mon Sep 17 00:00:00 2001 From: Christopher Tino Date: Thu, 22 Oct 2020 13:09:35 -0400 Subject: [PATCH 1/4] update setting for Ghostery Browser --- app/panel/components/Help.jsx | 11 ++++++++--- manifest.json | 7 ++++--- src/background.js | 12 +++++++++--- src/classes/ConfData.js | 4 ++-- src/classes/Globals.js | 28 ++++++++++++++-------------- 5 files changed, 37 insertions(+), 25 deletions(-) diff --git a/app/panel/components/Help.jsx b/app/panel/components/Help.jsx index ef5f442b9..d261df147 100644 --- a/app/panel/components/Help.jsx +++ b/app/panel/components/Help.jsx @@ -14,6 +14,9 @@ import React from 'react'; import { openSupportPage, openHubPage } from '../utils/msg'; import PanelToTabLink from './BuildingBlocks/PanelToTabLink'; +import globals from '../../../src/classes/Globals'; + +const { BROWSER_INFO } = globals; /** * Render Help view that user can open from the header drop-down menu @@ -23,9 +26,11 @@ const Help = () => (

{t('panel_help_panel_header')}

-
- {t('panel_help_setup')} -
+ { BROWSER_INFO.name !== 'ghostery_desktop' && ( +
+ {t('panel_help_setup')} +
+ )}

{t('panel_help_questions_header')}

{t('panel_help_faq')} diff --git a/manifest.json b/manifest.json index c2a7b9e5d..99eb5870b 100644 --- a/manifest.json +++ b/manifest.json @@ -3,10 +3,11 @@ "author": "Ghostery", "name": "__MSG_name__", "short_name": "Ghostery", - "version": "8.5.3", - "version_name": "8.5.3", + "version": "8.5.4", + "version_name": "8.5.4", "default_locale": "en", "description": "__MSG_short_description__", + "debug": true, "icons": { "16": "app/images/icon16.png", "48": "app/images/icon48.png", @@ -114,4 +115,4 @@ "cliqz/offers-templates/checkout.html", "cliqz/offers-templates/control-center.html" ] -} \ No newline at end of file +} diff --git a/src/background.js b/src/background.js index 1644488a0..b51d944ce 100644 --- a/src/background.js +++ b/src/background.js @@ -1617,6 +1617,12 @@ function initializeGhosteryModules() { conf.install_random_number = randomNumber; conf.install_date = dateString; + // Set default search partners for Ghostery Desktop Browser. These can be removed + // by the user under Trusted Site settings. + if (BROWSER_INFO.name === 'ghostery_desktop') { + conf.site_whitelist.push('bing.com', 'search.yahoo.com', 'startpage.com'); + } + metrics.setUninstallUrl(); metrics.ping('install'); @@ -1642,9 +1648,9 @@ function initializeGhosteryModules() { conf.enable_ad_block = !adblocker.isDisabled; conf.enable_anti_tracking = !antitracking.isDisabled; conf.enable_human_web = !humanweb.isDisabled; - conf.enable_offers = !offers.isDisabled && !IS_ANDROID; + conf.enable_offers = !offers.isDisabled && !IS_ANDROID && BROWSER_INFO.name !== 'ghostery_desktop'; - if (IS_FIREFOX && BROWSER_INFO.name !== 'ghostery_android') { + if (IS_FIREFOX && BROWSER_INFO.name !== 'ghostery_desktop' && BROWSER_INFO.name !== 'ghostery_android') { if (globals.JUST_INSTALLED) { conf.enable_human_web = false; conf.enable_offers = false; @@ -1747,7 +1753,7 @@ function initializeGhosteryModules() { // Open the Ghostery Hub on install with justInstalled query parameter set to true. // We need to do this after running scheduledTasks for the first time // because of an A/B test that determines which promo variant is shown in the Hub on install - if (globals.JUST_INSTALLED) { + if (globals.JUST_INSTALLED && BROWSER_INFO.name !== 'ghostery_desktop') { const showAlternateHub = conf.hub_layout === 'alternate'; const route = showAlternateHub ? '#home' : ''; chrome.tabs.create({ diff --git a/src/classes/ConfData.js b/src/classes/ConfData.js index 990db8cd4..f1b936967 100644 --- a/src/classes/ConfData.js +++ b/src/classes/ConfData.js @@ -111,8 +111,8 @@ class ConfData { _initProperty('enable_click2play', true); _initProperty('enable_click2play_social', true); _initProperty('enable_human_web', !IS_CLIQZ && !IS_FIREFOX); - _initProperty('enable_metrics', false); - _initProperty('enable_offers', !IS_CLIQZ && !IS_FIREFOX && !IS_ANDROID); + _initProperty('enable_metrics', BROWSER_INFO.name === 'ghostery_desktop'); + _initProperty('enable_offers', !IS_CLIQZ && !IS_FIREFOX && !IS_ANDROID && BROWSER_INFO.name !== 'ghostery_desktop'); _initProperty('enable_abtests', true); _initProperty('enable_smart_block', true); _initProperty('expand_all_trackers', true); diff --git a/src/classes/Globals.js b/src/classes/Globals.js index a48fc1a85..a2d612eb1 100644 --- a/src/classes/Globals.js +++ b/src/classes/Globals.js @@ -18,19 +18,6 @@ import parser from 'ua-parser-js'; const manifest = chrome.runtime.getManifest(); const isCliqzBrowser = !!(chrome.runtime.isCliqz); -/** -* Check for information about this browser -* Note: This is asynchronous and not available at runtime. -* @private -* @return boolean -*/ -function _checkBrowserInfo() { - if (typeof chrome.runtime.getBrowserInfo === 'function') { - return chrome.runtime.getBrowserInfo(); - } - return Promise.resolve(false); -} - /** * Structure which holds parameters to be used throughout the code, a.k.a. global values. * Most of them (but not all) are const. @@ -203,7 +190,7 @@ class Globals { // Check for Ghostery browsers if (browser.includes('firefox') || browser.includes('mozilla')) { - _checkBrowserInfo().then((info) => { + Globals._checkBrowserInfo().then((info) => { if (info.name === 'Ghostery') { if (platform.includes('android')) { this.BROWSER_INFO.displayName = 'Ghostery Android Browser'; @@ -220,6 +207,19 @@ class Globals { }); } } + + /** + * Check for information about this browser + * Note: This is asynchronous and not available at runtime. + * @private + * @return boolean + */ + static _checkBrowserInfo() { + if (typeof chrome.runtime.getBrowserInfo === 'function') { + return chrome.runtime.getBrowserInfo(); + } + return Promise.resolve(false); + } } // return the class as a singleton From 5bf5c45fbb1810ebc4be352aa7808638b794a035 Mon Sep 17 00:00:00 2001 From: Christopher Tino Date: Fri, 23 Oct 2020 09:52:44 -0400 Subject: [PATCH 2/4] set hub settings for Ghostery browser --- app/hub/Views/SetupView/SetupViewContainer.jsx | 4 ++-- app/panel/components/Help.jsx | 11 +++-------- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/app/hub/Views/SetupView/SetupViewContainer.jsx b/app/hub/Views/SetupView/SetupViewContainer.jsx index 38e410a23..6d4eb087c 100644 --- a/app/hub/Views/SetupView/SetupViewContainer.jsx +++ b/app/hub/Views/SetupView/SetupViewContainer.jsx @@ -110,8 +110,8 @@ class SetupViewContainer extends Component { actions.setAntiTracking({ enable_anti_tracking: true }); actions.setAdBlock({ enable_ad_block: true }); actions.setSmartBlocking({ enable_smart_block: true }); - actions.setGhosteryRewards({ enable_ghostery_rewards: !IS_FIREFOX && !IS_ANDROID }); - actions.setHumanWeb({ enable_human_web: !IS_FIREFOX || BROWSER_INFO.name === 'ghostery_android' }); + actions.setGhosteryRewards({ enable_ghostery_rewards: !IS_FIREFOX && !IS_ANDROID && BROWSER_INFO.name !== 'ghostery_desktop' }); + actions.setHumanWeb({ enable_human_web: !IS_FIREFOX || BROWSER_INFO.name === 'ghostery_desktop' || BROWSER_INFO.name === 'ghostery_android' }); } /** diff --git a/app/panel/components/Help.jsx b/app/panel/components/Help.jsx index d261df147..ef5f442b9 100644 --- a/app/panel/components/Help.jsx +++ b/app/panel/components/Help.jsx @@ -14,9 +14,6 @@ import React from 'react'; import { openSupportPage, openHubPage } from '../utils/msg'; import PanelToTabLink from './BuildingBlocks/PanelToTabLink'; -import globals from '../../../src/classes/Globals'; - -const { BROWSER_INFO } = globals; /** * Render Help view that user can open from the header drop-down menu @@ -26,11 +23,9 @@ const Help = () => (

{t('panel_help_panel_header')}

- { BROWSER_INFO.name !== 'ghostery_desktop' && ( - - )} +

{t('panel_help_questions_header')}

{t('panel_help_faq')} From 25f945d607d87bb9001b455f9b89c43aa248a01a Mon Sep 17 00:00:00 2001 From: Christopher Tino Date: Mon, 26 Oct 2020 12:03:15 -0400 Subject: [PATCH 3/4] use deferred promises to wait for getBrowserInfo() --- src/background.js | 29 +++++++++++++------------ src/classes/ConfData.js | 9 ++++++-- src/classes/Deferred.js | 27 +++++++++++++++++++++++ src/classes/Globals.js | 47 ++++++++++++++++++++++------------------- 4 files changed, 75 insertions(+), 37 deletions(-) create mode 100644 src/classes/Deferred.js diff --git a/src/background.js b/src/background.js index b51d944ce..f0d211cab 100644 --- a/src/background.js +++ b/src/background.js @@ -21,6 +21,8 @@ import ghosteryDebugger from './classes/Debugger'; // object classes import Events from './classes/EventHandlers'; import Policy from './classes/Policy'; +import Rewards from './classes/Rewards'; +import GhosteryModule from './classes/Module'; // static classes import panelData from './classes/PanelData'; import bugDb from './classes/BugDb'; @@ -37,11 +39,8 @@ import globals from './classes/Globals'; import surrogatedb from './classes/SurrogateDb'; import tabInfo from './classes/TabInfo'; import metrics from './classes/Metrics'; -import Rewards from './classes/Rewards'; import account from './classes/Account'; -import GhosteryModule from './classes/Module'; import promoModals from './classes/PromoModals'; - // utilities import { allowAllwaysC2P } from './utils/click2play'; import * as common from './utils/common'; @@ -1648,18 +1647,22 @@ function initializeGhosteryModules() { conf.enable_ad_block = !adblocker.isDisabled; conf.enable_anti_tracking = !antitracking.isDisabled; conf.enable_human_web = !humanweb.isDisabled; - conf.enable_offers = !offers.isDisabled && !IS_ANDROID && BROWSER_INFO.name !== 'ghostery_desktop'; - if (IS_FIREFOX && BROWSER_INFO.name !== 'ghostery_desktop' && BROWSER_INFO.name !== 'ghostery_android') { - if (globals.JUST_INSTALLED) { - conf.enable_human_web = false; - conf.enable_offers = false; - } else if (globals.REQUIRE_LEGACY_OPT_IN && !conf.cliqz_legacy_opt_in) { - conf.enable_human_web = false; - conf.enable_offers = cliqz.prefs.get('myoffrz.opted_in') || false; - conf.cliqz_legacy_opt_in = true; + // Make sure that getBrowserInfo() has resolved before we set these properties + (async() => { + await globals.BROWSER_INFO_READY; + conf.enable_offers = !offers.isDisabled && !IS_ANDROID && BROWSER_INFO.name !== 'ghostery_desktop'; + if (IS_FIREFOX && BROWSER_INFO.name !== 'ghostery_desktop' && BROWSER_INFO.name !== 'ghostery_android') { + if (globals.JUST_INSTALLED) { + conf.enable_human_web = false; + conf.enable_offers = false; + } else if (globals.REQUIRE_LEGACY_OPT_IN && !conf.cliqz_legacy_opt_in) { + conf.enable_human_web = false; + conf.enable_offers = cliqz.prefs.get('myoffrz.opted_in') || false; + conf.cliqz_legacy_opt_in = true; + } } - } + })(); const myoffrzShouldMigrate = conf.rewards_opted_in !== undefined && cliqz.prefs.get('myoffrz.opted_in', undefined) === undefined; if (myoffrzShouldMigrate) { diff --git a/src/classes/ConfData.js b/src/classes/ConfData.js index f1b936967..3a2e7df1b 100644 --- a/src/classes/ConfData.js +++ b/src/classes/ConfData.js @@ -93,6 +93,13 @@ class ConfData { _initProperty('trackers_banner_status', true); } + // Make sure that getBrowserInfo() has resolved before we set these properties + (async() => { + await globals.BROWSER_INFO_READY; + _initProperty('enable_metrics', BROWSER_INFO.name === 'ghostery_desktop'); + _initProperty('enable_offers', !IS_CLIQZ && !IS_FIREFOX && !IS_ANDROID && BROWSER_INFO.name !== 'ghostery_desktop'); + })(); + // simple props _initProperty('alert_bubble_pos', 'br'); _initProperty('alert_bubble_timeout', 15); @@ -111,8 +118,6 @@ class ConfData { _initProperty('enable_click2play', true); _initProperty('enable_click2play_social', true); _initProperty('enable_human_web', !IS_CLIQZ && !IS_FIREFOX); - _initProperty('enable_metrics', BROWSER_INFO.name === 'ghostery_desktop'); - _initProperty('enable_offers', !IS_CLIQZ && !IS_FIREFOX && !IS_ANDROID && BROWSER_INFO.name !== 'ghostery_desktop'); _initProperty('enable_abtests', true); _initProperty('enable_smart_block', true); _initProperty('expand_all_trackers', true); diff --git a/src/classes/Deferred.js b/src/classes/Deferred.js new file mode 100644 index 000000000..63db35612 --- /dev/null +++ b/src/classes/Deferred.js @@ -0,0 +1,27 @@ +/** + * Deferred Promise + * + * Used to resolve a Promise outside of its function scope + * + * Ghostery Browser Extension + * https://www.ghostery.com/ + * + * Copyright 2020 Ghostery, Inc. All rights reserved. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0 + */ + +class Deferred { + constructor() { + this.promise = new Promise((resolve, reject) => { + this.resolve = resolve; + this.reject = reject; + }); + this.then = this.promise.then.bind(this.promise); + this.catch = this.promise.catch.bind(this.promise); + } +} + +export default Deferred; diff --git a/src/classes/Globals.js b/src/classes/Globals.js index a2d612eb1..6d172d1ab 100644 --- a/src/classes/Globals.js +++ b/src/classes/Globals.js @@ -14,13 +14,14 @@ */ import parser from 'ua-parser-js'; +import Deferred from './Deferred'; const manifest = chrome.runtime.getManifest(); const isCliqzBrowser = !!(chrome.runtime.isCliqz); /** * Structure which holds parameters to be used throughout the code, a.k.a. global values. - * Most of them (but not all) are const. + * Most of them (but not all) are constants. * @memberOf BackgroundClasses */ class Globals { @@ -32,6 +33,7 @@ class Globals { this.BROWSER_INFO = { displayName: '', name: '', token: '', version: '', os: 'other' }; + this.BROWSER_INFO_READY = new Deferred(); this.IS_CLIQZ = !!((manifest.applications && manifest.applications.gecko && manifest.applications.gecko.update_url) || isCliqzBrowser); // flags @@ -189,35 +191,36 @@ class Globals { this.BROWSER_INFO.version = version; // Check for Ghostery browsers - if (browser.includes('firefox') || browser.includes('mozilla')) { - Globals._checkBrowserInfo().then((info) => { - if (info.name === 'Ghostery') { - if (platform.includes('android')) { - this.BROWSER_INFO.displayName = 'Ghostery Android Browser'; - this.BROWSER_INFO.name = 'ghostery_android'; - this.BROWSER_INFO.token = 'ga'; - this.BROWSER_INFO.os = 'android'; - } 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._checkBrowserInfo().then((info) => { + if (info && info.name === 'Ghostery') { + if (platform.includes('android')) { + this.BROWSER_INFO.displayName = 'Ghostery Android Browser'; + this.BROWSER_INFO.name = 'ghostery_android'; + this.BROWSER_INFO.token = 'ga'; + this.BROWSER_INFO.os = 'android'; + } 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; + } + }); } /** - * Check for information about this browser - * Note: This is asynchronous and not available at runtime. + * Check for information about this browser (FF only) * @private - * @return boolean + * @return Promise */ - static _checkBrowserInfo() { + _checkBrowserInfo() { if (typeof chrome.runtime.getBrowserInfo === 'function') { - return chrome.runtime.getBrowserInfo(); + return chrome.runtime.getBrowserInfo().then((data) => { + this.BROWSER_INFO_READY.resolve(true); + return data; + }); } + this.BROWSER_INFO_READY.resolve(false); return Promise.resolve(false); } } From f3affd3b2954c5645fdaa5fe6101e265cc37aa37 Mon Sep 17 00:00:00 2001 From: Christopher Tino Date: Mon, 26 Oct 2020 13:21:58 -0400 Subject: [PATCH 4/4] simplify globals BROWSER_INFO_READY --- src/classes/Deferred.js | 27 --------------------------- src/classes/Globals.js | 19 ++++++------------- 2 files changed, 6 insertions(+), 40 deletions(-) delete mode 100644 src/classes/Deferred.js diff --git a/src/classes/Deferred.js b/src/classes/Deferred.js deleted file mode 100644 index 63db35612..000000000 --- a/src/classes/Deferred.js +++ /dev/null @@ -1,27 +0,0 @@ -/** - * Deferred Promise - * - * Used to resolve a Promise outside of its function scope - * - * Ghostery Browser Extension - * https://www.ghostery.com/ - * - * Copyright 2020 Ghostery, Inc. All rights reserved. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0 - */ - -class Deferred { - constructor() { - this.promise = new Promise((resolve, reject) => { - this.resolve = resolve; - this.reject = reject; - }); - this.then = this.promise.then.bind(this.promise); - this.catch = this.promise.catch.bind(this.promise); - } -} - -export default Deferred; diff --git a/src/classes/Globals.js b/src/classes/Globals.js index 6d172d1ab..d6d28fae8 100644 --- a/src/classes/Globals.js +++ b/src/classes/Globals.js @@ -14,7 +14,6 @@ */ import parser from 'ua-parser-js'; -import Deferred from './Deferred'; const manifest = chrome.runtime.getManifest(); const isCliqzBrowser = !!(chrome.runtime.isCliqz); @@ -33,7 +32,7 @@ class Globals { this.BROWSER_INFO = { displayName: '', name: '', token: '', version: '', os: 'other' }; - this.BROWSER_INFO_READY = new Deferred(); + this.BROWSER_INFO_READY = this.buildBrowserInfo(); this.IS_CLIQZ = !!((manifest.applications && manifest.applications.gecko && manifest.applications.gecko.update_url) || isCliqzBrowser); // flags @@ -135,13 +134,11 @@ class Globals { abtests: {}, cmp_data: {} }; - - this.buildBrowserInfo(); } /** * Gets UA and Platform strings for current browser - * @return {Object} + * @return {Promise} */ buildBrowserInfo() { const ua = parser(navigator.userAgent); @@ -191,7 +188,7 @@ class Globals { this.BROWSER_INFO.version = version; // Check for Ghostery browsers - this._checkBrowserInfo().then((info) => { + return Globals._checkBrowserInfo().then((info) => { if (info && info.name === 'Ghostery') { if (platform.includes('android')) { this.BROWSER_INFO.displayName = 'Ghostery Android Browser'; @@ -211,16 +208,12 @@ class Globals { /** * Check for information about this browser (FF only) * @private - * @return Promise + * @return {Promise} */ - _checkBrowserInfo() { + static _checkBrowserInfo() { if (typeof chrome.runtime.getBrowserInfo === 'function') { - return chrome.runtime.getBrowserInfo().then((data) => { - this.BROWSER_INFO_READY.resolve(true); - return data; - }); + return chrome.runtime.getBrowserInfo(); } - this.BROWSER_INFO_READY.resolve(false); return Promise.resolve(false); } }