diff --git a/CHANGELOG.md b/CHANGELOG.md
index f98a25bb3..a6c241a31 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,6 @@
### GHOSTERY 8.4.1 (UNRELEASED)
-+ Add new Data Points tracker category in detail view with anti-tracking whitelist (#417)
++ Add new Unknown tracker category in detail view with anti-tracking whitelist (#417, #433)
+ Fixes broken `target=_blank` links in Opera (#426)
+ Fixes error `Uncaught TypeError: c.querySelectorAll` (#406)
+ Show ad-blocking icons in detail view tracker list (#411)
diff --git a/CODEOWNERS b/CODEOWNERS
index fb3fb8d25..63a84492d 100644
--- a/CODEOWNERS
+++ b/CODEOWNERS
@@ -13,16 +13,16 @@
/src/classes/PolicySmartBlock.js @jsignanini
/src/classes/Conf.js @zarembsky
/src/classes/ConfData.js @zarembsky
-/src/classes/PanelData.js @zarembsky
+/src/classes/PanelData.js @wlycdgr
# Background
/src/background.js @zarembsky
# The Ghostery Hub
-/app/hub/ @IAmThePan
+/app/hub/ @Eden12345
# Shared Components
-/app/shared-components @IAmThePan
+/app/shared-components @wlycdgr
# Build Tools
.eslintrc.js @christophertino
@@ -30,4 +30,4 @@ babel.config.js @christophertino
webpack.config.js @christophertino
# Unit Tests
-/test/ @IAmThePan
+/test/ @Eden12345
diff --git a/app/images/panel/anti_tracking_unknown.svg b/app/images/panel/anti_tracking_unknown.svg
deleted file mode 100644
index 936cfeb8c..000000000
--- a/app/images/panel/anti_tracking_unknown.svg
+++ /dev/null
@@ -1,11 +0,0 @@
-
diff --git a/app/images/panel/unknown.svg b/app/images/panel/unknown.svg
new file mode 100644
index 000000000..0b5dc198c
--- /dev/null
+++ b/app/images/panel/unknown.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/panel/actions/BlockingActions.js b/app/panel/actions/BlockingActions.js
index 5e4c273f9..3964acaac 100644
--- a/app/panel/actions/BlockingActions.js
+++ b/app/panel/actions/BlockingActions.js
@@ -15,11 +15,11 @@ import {
UPDATE_BLOCKING_DATA,
UPDATE_BLOCK_ALL_TRACKERS,
UPDATE_CATEGORIES,
- UPDATE_ANTI_TRACKING_HIDE,
+ UPDATE_UNKNOWN_CATEGORY_HIDE,
UPDATE_CATEGORY_BLOCKED,
UPDATE_TRACKER_BLOCKED,
UPDATE_TRACKER_TRUST_RESTRICT,
- UPDATE_ANTI_TRACKING_WHITELIST,
+ UPDATE_CLIQZ_MODULE_WHITELIST,
TOGGLE_EXPAND_ALL
} from '../constants/constants';
@@ -64,9 +64,9 @@ export function updateCategories(data) {
* @param {Object} data
* @return {Object}
*/
-export function updateAntiTrackingHide(data) {
+export function updateUnknownCategoryHide(data) {
return {
- type: UPDATE_ANTI_TRACKING_HIDE,
+ type: UPDATE_UNKNOWN_CATEGORY_HIDE,
data,
};
}
@@ -119,16 +119,16 @@ export function updateTrackerTrustRestrict(data) {
}
/**
- * Called from Tracker.handleAntiTrackingWhitelist()
+ * Called from Tracker.handleCliqzTrackerWhitelist()
* @param {Object} data
* @return {Object} dispatch
*/
-export function updateAntiTrackingWhitelist(unknownTracker) {
+export function updateCliqzModuleWhitelist(unknownTracker) {
return function(dispatch, getState) {
// use redux-thunk to get pageHost from summary
const { pageHost } = getState().summary;
dispatch({
- type: UPDATE_ANTI_TRACKING_WHITELIST,
+ type: UPDATE_CLIQZ_MODULE_WHITELIST,
data: { unknownTracker, pageHost },
});
};
diff --git a/app/panel/components/Blocking.jsx b/app/panel/components/Blocking.jsx
index a26c4c2fe..45ea17733 100644
--- a/app/panel/components/Blocking.jsx
+++ b/app/panel/components/Blocking.jsx
@@ -93,7 +93,7 @@ class Blocking extends React.Component {
*/
setShow(filterName) {
const updated_categories = JSON.parse(JSON.stringify(this.props.categories)); // deep clone
- const updatedAntiTracking = JSON.parse(JSON.stringify(this.props.antiTracking)); // deep clone
+ const updatedUnknownCategory = JSON.parse(JSON.stringify(this.props.unknownCategory)); // deep clone
updated_categories.forEach((category) => {
let count = 0;
@@ -112,9 +112,9 @@ class Blocking extends React.Component {
category.num_shown = (show) ? count : 0;
});
- updatedAntiTracking.hide = !(filterName === 'all' || filterName === 'unknown');
+ updatedUnknownCategory.hide = !(filterName === 'all' || filterName === 'unknown');
this.props.actions.updateCategories(updated_categories);
- this.props.actions.updateAntiTrackingHide(updatedAntiTracking);
+ this.props.actions.updateUnknownCategoryHide(updatedUnknownCategory);
}
/**
@@ -284,7 +284,7 @@ class Blocking extends React.Component {
const {
actions,
categories,
- antiTracking,
+ unknownCategory,
enable_anti_tracking,
expand_all_trackers,
is_expanded,
@@ -329,7 +329,7 @@ class Blocking extends React.Component {
language={language}
smartBlockActive={smartBlockActive}
smartBlock={smartBlock}
- antiTracking={antiTracking}
+ unknownCategory={unknownCategory}
enable_anti_tracking={enable_anti_tracking}
/>
)}
diff --git a/app/panel/components/Blocking/Categories.jsx b/app/panel/components/Blocking/Categories.jsx
index fdfa3bbef..a51b58882 100644
--- a/app/panel/components/Blocking/Categories.jsx
+++ b/app/panel/components/Blocking/Categories.jsx
@@ -32,7 +32,7 @@ class Categories extends React.Component {
const {
categories,
expandAll,
- antiTracking,
+ unknownCategory,
enable_anti_tracking,
sitePolicy,
} = this.props;
@@ -43,22 +43,23 @@ class Categories extends React.Component {
let whitelistedTotal = 0;
const unknownCategoryMapping = isUnknown ? (
{
- id: 'anti_tracking_unknown',
+ id: 'unknown',
name: t('unknown'),
description: t('unknown_description'),
- img_name: 'anti_tracking_unknown',
- num_total: antiTracking.unknownTrackers.length,
- num_blocked: antiTracking.unknownTrackerCount,
- num_shown: antiTracking.hide ? 0 : antiTracking.unknownTrackers.length,
- trackers: antiTracking.unknownTrackers.map((unknownTracker) => {
+ img_name: 'unknown',
+ num_total: unknownCategory.unknownTrackers.length,
+ num_blocked: unknownCategory.unknownTrackerCount,
+ num_shown: unknownCategory.hide ? 0 : unknownCategory.unknownTrackers.length,
+ trackers: unknownCategory.unknownTrackers.map((unknownTracker) => {
if (unknownTracker.whitelisted) { whitelistedTotal++; }
return {
name: unknownTracker.name,
domains: unknownTracker.domains,
whitelisted: unknownTracker.whitelisted,
+ type: unknownTracker.type,
siteRestricted: sitePolicy === 1,
blocked: false,
- catId: 'anti_tracking_unknown',
+ catId: 'unknown',
description: '',
id: unknownTracker.name + unknownTracker.domains[0],
shouldShow: true,
@@ -94,13 +95,13 @@ class Categories extends React.Component {
};
const categoryList = categories.map((category, index) => renderCategory(category, index));
- const unknownCategory = antiTracking && antiTracking.unknownTrackers.length
+ const renderUnknownCategory = unknownCategory && unknownCategory.unknownTrackers.length
? renderCategory(null, categoryList.length, true) : null;
return (
{categoryList}
- {unknownCategory}
+ {renderUnknownCategory}
);
}
diff --git a/app/panel/components/Blocking/Category.jsx b/app/panel/components/Blocking/Category.jsx
index cd4abc709..587b84567 100644
--- a/app/panel/components/Blocking/Category.jsx
+++ b/app/panel/components/Blocking/Category.jsx
@@ -13,8 +13,6 @@
import React from 'react';
import Trackers from './Trackers';
-import { CliqzFeature } from '../BuildingBlocks';
-import Globals from '../../../../src/classes/Globals';
/**
* @class Implement Category component, which represents a
@@ -165,8 +163,6 @@ class Category extends React.Component {
category,
paused_blocking,
sitePolicy,
- enable_anti_tracking,
- actions,
isUnknown,
} = this.props;
@@ -185,26 +181,11 @@ class Category extends React.Component {
trackersBlockedCount = category.num_blocked || 0;
}
- const clickCliqzFeature = (options) => {
- const { feature, status, text } = options;
- this.props.actions.showNotification({
- updated: feature,
- reload: true,
- text,
- });
- actions.toggleCliqzFeature(feature, status);
- };
- const cliqzInactive = paused_blocking || sitePolicy || Globals.IS_CLIQZ;
-
return (
{isUnknown && (
-
-
- {t('enhanced_anti_tracking')}
-
-
+
)}
@@ -272,20 +253,6 @@ class Category extends React.Component {
)}
- {isUnknown && (
-
-
-
- )}
diff --git a/app/panel/components/Blocking/Tracker.jsx b/app/panel/components/Blocking/Tracker.jsx
index 9997bea7e..2f51e50a9 100644
--- a/app/panel/components/Blocking/Tracker.jsx
+++ b/app/panel/components/Blocking/Tracker.jsx
@@ -42,7 +42,7 @@ class Tracker extends React.Component {
this.clickTrackerStatus = this.clickTrackerStatus.bind(this);
this.clickTrackerTrust = this.clickTrackerTrust.bind(this);
this.clickTrackerRestrict = this.clickTrackerRestrict.bind(this);
- this.handleAntiTrackingWhitelist = this.handleAntiTrackingWhitelist.bind(this);
+ this.handleCliqzTrackerWhitelist = this.handleCliqzTrackerWhitelist.bind(this);
}
/**
@@ -217,10 +217,10 @@ class Tracker extends React.Component {
* Trigger actions which persist the new setting and notify user
* that the page should be reloaded.
*/
- handleAntiTrackingWhitelist() {
+ handleCliqzTrackerWhitelist() {
const { tracker } = this.props;
- this.props.actions.updateAntiTrackingWhitelist(tracker);
+ this.props.actions.updateCliqzModuleWhitelist(tracker);
this.props.actions.showNotification({
updated: `${tracker.name}-whitelisting-status-changed`,
reload: true,
@@ -335,16 +335,18 @@ class Tracker extends React.Component {
{!tracker.whitelisted && this._renderCliqzStatsContainer()}
- {!isUnknown ? renderKnownTrackerButtons(
+ {!isUnknown && renderKnownTrackerButtons(
this.props.tracker.ss_allowed,
this.props.tracker.ss_blocked,
this.clickTrackerTrust,
this.clickTrackerRestrict,
this.clickTrackerStatus,
- ) : renderUnknownTrackerButtons(
- this.handleAntiTrackingWhitelist,
+ )}
+ {isUnknown && tracker.type === 'antiTracking' && renderUnknownTrackerButtons(
+ this.handleCliqzTrackerWhitelist,
tracker.whitelisted,
tracker.siteRestricted,
+ tracker.type,
)}
diff --git a/app/panel/components/Blocking/trackerButtonRenderHelpers.jsx b/app/panel/components/Blocking/trackerButtonRenderHelpers.jsx
index e3829b881..2027507b6 100644
--- a/app/panel/components/Blocking/trackerButtonRenderHelpers.jsx
+++ b/app/panel/components/Blocking/trackerButtonRenderHelpers.jsx
@@ -54,7 +54,7 @@ export const renderKnownTrackerButtons = (
);
export const renderUnknownTrackerButtons = (
- handleAntiTrackingWhitelist, whitelisted, siteRestricted
+ handleCliqzTrackerWhitelist, whitelisted, siteRestricted, type
) => {
const svgContainerClasses = ClassNames('unknown-svg-container', {
whitelisted: whitelisted && !siteRestricted,
@@ -65,7 +65,7 @@ export const renderUnknownTrackerButtons = (
{/* USE INLINE SVG FOR TRUST CIRCLE TO CHANGE COLORS WITH CSS */}
-
))}
- {!!antiTracking.unknownTrackerCount && (
+ {!!antiTracking.unknownTrackerCount && !!adBlock.unknownTrackerCount && (
{
@@ -57,33 +62,32 @@ describe('app/panel/reducers/summary.js', () => {
test('reducer correctly handles UPDATE_CLIQZ_MODULE_DATA', () => {
const data = {
- adblock: {
- unchangedData: false,
- changedData: true,
- newData: true
+ adBlock: {
+ totalCount: 3,
+ trackerCount: 2,
},
antiTracking: {
totalUnsafeCount: 5,
totalUnknownCount: 3,
- unknownTrackerCount: 1
+ trackerCount: 1
}
};
const action = { data, type: UPDATE_CLIQZ_MODULE_DATA };
const initState = Immutable({
tab_id: 0,
adBlock: {
- unchangedData: false,
- changedData: false
+ totalCount: 1,
+ trackerCount: 1,
},
antiTracking: {
totalUnsafeCount: 1,
totalUnknownCount: 0,
- unknownTrackerCount: 0
+ trackerCount: 0
}
});
const updatedState = Immutable.merge(initState, {
- adBlock: data.adblock,
+ adBlock: data.adBlock,
antiTracking: data.antiTracking
});
diff --git a/app/panel/reducers/blocking.js b/app/panel/reducers/blocking.js
index 7acca9d03..87bc75141 100644
--- a/app/panel/reducers/blocking.js
+++ b/app/panel/reducers/blocking.js
@@ -17,13 +17,14 @@ import {
FILTER_TRACKERS,
UPDATE_BLOCK_ALL_TRACKERS,
UPDATE_CATEGORIES,
- UPDATE_ANTI_TRACKING_HIDE,
+ UPDATE_UNKNOWN_CATEGORY_HIDE,
UPDATE_CATEGORY_BLOCKED,
UPDATE_TRACKER_BLOCKED,
UPDATE_TRACKER_TRUST_RESTRICT,
- UPDATE_ANTI_TRACKING_WHITELIST,
+ UPDATE_CLIQZ_MODULE_WHITELIST,
TOGGLE_EXPAND_ALL,
- UPDATE_CLIQZ_MODULE_DATA
+ UPDATE_CLIQZ_MODULE_DATA,
+ UPDATE_SUMMARY_DATA
} from '../constants/constants';
import {
updateTrackerBlocked, updateCategoryBlocked, updateBlockAllTrackers, toggleExpandAll
@@ -40,13 +41,14 @@ const initialState = {
},
site_specific_unblocks: {},
site_specific_blocks: {},
- antiTracking: {
- totalUnsafeCount: 0, // The amount of data points scrubbed by Anti-Tracking
- totalUnknownCount: 0, // The amount of data points scrubbed by Anti-Tracking for Trackers not in the Ghostery DB
- unknownTrackerCount: 0, // The amount of trackers blocked by Anti-Tracking
+ unknownCategory: {
+ totalUnsafeCount: 0, // The amount of data points scrubbed by Anti-Tracking and Ad Block
+ totalUnknownCount: 0, // The amount of data points scrubbed by Anti-Tracking and Ad Block for Trackers not in the Ghostery DB
+ trackerCount: 0, // The amount of trackers scrubbed by Anti-Tracking and Ad Block (which are each associated with 1 or more data points)
+ unknownTrackerCount: 0, // The amount of unknown trackers scrubbed by Anti-Tracking and Ad Block
unknownTrackers: [], // An array of objects associated with each unknown Tracker (includes both blocked and whitelisted trackers for this site)
whitelistedUrls: {}, // An object of whitelisted url domains pointing to an object with the associated tracker name and an array of whitelisted host domains
- hide: false, // Whether or not to display the Anti-Tracking blocking category
+ hide: false, // Whether or not to display the Unknown category
}
};
@@ -77,8 +79,8 @@ export default (state = initialState, action) => {
case UPDATE_CATEGORIES: {
return Object.assign({}, state, { categories: action.data });
}
- case UPDATE_ANTI_TRACKING_HIDE: {
- return Object.assign({}, state, { antiTracking: action.data });
+ case UPDATE_UNKNOWN_CATEGORY_HIDE: {
+ return Object.assign({}, state, { unknownCategory: action.data });
}
case UPDATE_CATEGORY_BLOCKED: {
const updated = updateCategoryBlocked(state, action);
@@ -96,15 +98,35 @@ export default (state = initialState, action) => {
const updated = _updateTrackerTrustRestrict(state, action);
return Object.assign({}, state, updated);
}
- case UPDATE_ANTI_TRACKING_WHITELIST: {
- const antiTracking = _updateAntiTrackingWhitelist(state, action);
- return Object.assign({}, state, { antiTracking });
+ case UPDATE_CLIQZ_MODULE_WHITELIST: {
+ const unknownCategory = _updateCliqzModuleWhitelist(state, action);
+ return Object.assign({}, state, { unknownCategory });
}
- case UPDATE_CLIQZ_MODULE_DATA: {
- const { hide } = state.antiTracking;
- return Object.assign({}, state, {
- antiTracking: Object.assign({}, action.data.antiTracking, { hide })
- });
+ case UPDATE_CLIQZ_MODULE_DATA:
+ case UPDATE_SUMMARY_DATA: {
+ if (action.data.antiTracking) {
+ const { antiTracking, adBlock } = action.data;
+ let adBlockUnknownTrackers = adBlock.unknownTrackers;
+ antiTracking.unknownTrackers.forEach((tracker) => {
+ if (tracker.whitelisted) {
+ adBlockUnknownTrackers = adBlockUnknownTrackers.filter(adBlockTracker => (
+ adBlockTracker.name !== tracker.name
+ ));
+ }
+ });
+
+ const unknownCategory = {
+ totalUnsafeCount: antiTracking.totalUnsafeCount + adBlock.totalUnsafeCount,
+ totalUnknownCount: antiTracking.totalUnknownCount + adBlock.totalUnknownCount,
+ trackerCount: antiTracking.trackerCount + adBlock.trackerCount,
+ unknownTrackerCount: antiTracking.unknownTrackerCount + adBlock.unknownTrackerCount,
+ unknownTrackers: Array.from(new Set(antiTracking.unknownTrackers.concat(adBlockUnknownTrackers))),
+ whitelistedUrls: Object.assign({}, antiTracking.whitelistedUrls, adBlock.whitelistedUrls),
+ hide: state.unknownCategory.hide,
+ };
+ return Object.assign({}, state, { unknownCategory });
+ }
+ return state;
}
default: return state;
@@ -186,9 +208,9 @@ const _updateTrackerTrustRestrict = (state, action) => {
* @param {Object} action action which provides data
* @return {Object} updated categories and site-specific blocking counters
*/
-const _updateAntiTrackingWhitelist = (state, action) => {
- const updatedAntiTracking = JSON.parse(JSON.stringify(state.antiTracking));
- const { whitelistedUrls } = updatedAntiTracking;
+const _updateCliqzModuleWhitelist = (state, action) => {
+ const updatedUnknownCategory = JSON.parse(JSON.stringify(state.unknownCategory));
+ const { whitelistedUrls } = updatedUnknownCategory;
const { unknownTracker, pageHost } = action.data;
const addToWhitelist = () => {
@@ -229,13 +251,13 @@ const _updateAntiTrackingWhitelist = (state, action) => {
addToWhitelist();
}
- updatedAntiTracking.unknownTrackers.forEach((tracker) => {
+ updatedUnknownCategory.unknownTrackers.forEach((tracker) => {
if (tracker.name === unknownTracker.name) {
tracker.whitelisted = !tracker.whitelisted;
}
});
- sendMessage('setPanelData', { anti_tracking_whitelist: whitelistedUrls });
+ sendMessage('setPanelData', { cliqz_module_whitelist: whitelistedUrls });
- return updatedAntiTracking;
+ return updatedUnknownCategory;
};
diff --git a/app/panel/reducers/summary.js b/app/panel/reducers/summary.js
index 759b3c543..1e80aea2c 100644
--- a/app/panel/reducers/summary.js
+++ b/app/panel/reducers/summary.js
@@ -39,7 +39,12 @@ const initialState = {
antiTracking: {
totalUnsafeCount: 0, // The amount of data points scrubbed by Anti-Tracking
totalUnknownCount: 0, // The amount of data points scrubbed by Anti-Tracking for Trackers not in the Ghostery DB
- unknownTrackerCount: 0, // The amount of trackers blocked by Anti-Tracking
+ trackerCount: 0, // The amount of trackers scrubbed by Anti-Tracking (which are each associated with 1 or more data points)
+ unknownTrackerCount: 0, // The amount of unknown trackers scrubbed by Anti-Tracking
+ },
+ adBlock: {
+ totalCount: 0, // The amount of ads blocked by Ad Blocking
+ trackerCount: 0, // The amount of trackers blocked by Ad Blocking (which are each associated with 1 or more ads)
}
};
/**
@@ -52,15 +57,9 @@ const initialState = {
*/
export default (state = initialState, action) => {
switch (action.type) {
- case UPDATE_SUMMARY_DATA: {
- return Object.assign({}, state, action.data);
- }
+ case UPDATE_SUMMARY_DATA:
case UPDATE_CLIQZ_MODULE_DATA: {
- const { totalUnsafeCount, totalUnknownCount, unknownTrackerCount } = action.data.antiTracking;
- return Object.assign({}, state, {
- adBlock: action.data.adblock,
- antiTracking: { totalUnsafeCount, totalUnknownCount, unknownTrackerCount },
- });
+ return Object.assign({}, state, action.data);
}
case UPDATE_GHOSTERY_PAUSED: {
return Object.assign({}, state, { paused_blocking: action.data.ghosteryPaused, paused_blocking_timeout: action.data.time });
diff --git a/app/scss/partials/_blocking_category.scss b/app/scss/partials/_blocking_category.scss
index 9f0cb86cc..75fdf1930 100644
--- a/app/scss/partials/_blocking_category.scss
+++ b/app/scss/partials/_blocking_category.scss
@@ -58,7 +58,7 @@
height: 62px;
&.anti-tracking-header {
- height: 80px;
+ height: 66px;
border-top: 0;
padding-top: 0;
}
@@ -141,27 +141,14 @@
}
}
.Category__antiTrackingDivider {
- background-color: #00AEF0;
width: 110%;
- height: 18px;
+ height: 4px;
+ border-top: 1px solid #00AEF0;
+ border-bottom: 1px solid #00AEF0;
margin-bottom: 9px;
}
- .Category__antiTrackingDividerText {
- margin: 0;
- padding-top: 2px;
- padding-left: 15px;
- font-size: 10px;
- color: white;
- }
.Category__antiTrackingCaret {
position: relative;
- bottom: 14px;
- left: 8px;
- }
- .Category__antiTrackingButton {
- display: inline-block;
- position: relative;
- left: 4px;
- bottom: 4px
+ left: -20px;
}
}
diff --git a/app/scss/partials/_blocking_tracker.scss b/app/scss/partials/_blocking_tracker.scss
index 1c0e35053..a238516aa 100644
--- a/app/scss/partials/_blocking_tracker.scss
+++ b/app/scss/partials/_blocking_tracker.scss
@@ -144,7 +144,7 @@
justify-content: space-between;
&:not(.whitelisted) {
- .anti-track-trust {
+ .cliqz-tracker-trust {
visibility: hidden;
cursor: pointer;
.border { stroke: #d8d8d8; }
@@ -152,7 +152,7 @@
.trust-circle { stroke: #9B9B9B; }
}
- .anti-track-scrub {
+ .cliqz-tracker-scrub {
pointer-events: none;
}
}
@@ -160,10 +160,10 @@
&.whitelisted {
flex-direction: row-reverse;
- .anti-track-trust {
+ .cliqz-tracker-trust {
pointer-events: none;
}
- .anti-track-scrub {
+ .cliqz-tracker-scrub {
visibility: hidden;
pointer-events: auto;
cursor: pointer;
@@ -174,13 +174,13 @@
}
&:hover {
- .anti-track-trust {
+ .cliqz-tracker-trust {
visibility: visible;
}
}
&.whitelisted:hover {
- .anti-track-scrub {
+ .cliqz-tracker-scrub {
visibility: visible;
}
}
diff --git a/src/background.js b/src/background.js
index 4c6d49802..34541f334 100644
--- a/src/background.js
+++ b/src/background.js
@@ -842,13 +842,9 @@ function onMessageHandler(request, sender, callback) {
return false;
}
if (name === 'getCliqzModuleData') { // panel-android only
- if (message && message.tabId) {
- sendCliqzModuleCounts(message.tabId, callback);
- } else {
- utils.getActiveTab((tab) => {
- sendCliqzModuleCounts(tab.id, callback);
- });
- }
+ utils.getActiveTab((tab) => {
+ sendCliqzModuleCounts(tab.id, tab.pageHost, callback);
+ });
return true;
}
if (name === 'getTrackerDescription') {
diff --git a/src/classes/BrowserButton.js b/src/classes/BrowserButton.js
index 8a419945d..34731cc31 100644
--- a/src/classes/BrowserButton.js
+++ b/src/classes/BrowserButton.js
@@ -17,7 +17,7 @@ import conf from './Conf';
import foundBugs from './FoundBugs';
import rewards from './Rewards';
import Policy from './Policy';
-import { getCliqzAntiTrackingData, getCliqzAdBlockingCount } from '../utils/cliqzModulesData';
+import { getCliqzData } from '../utils/cliqzModulesData';
import { getTab } from '../utils/utils';
import { log } from '../utils/common';
import globals from './Globals';
@@ -131,6 +131,7 @@ class BrowserButton {
*/
_getIconCount(tab) {
const tabId = tab.id;
+ const tabHostUrl = tab.pageHost;
let trackerCount = '';
let alert = false;
@@ -145,8 +146,8 @@ class BrowserButton {
}
const { appsCount, appsAlertCount } = this._getTrackerCount(tabId);
- const adBlockingCount = getCliqzAdBlockingCount(tabId).totalCount;
- const antiTrackingCount = getCliqzAntiTrackingData(tabId).totalUnsafeCount;
+ const adBlockingCount = getCliqzData(tabId, tabHostUrl).trackerCount;
+ const antiTrackingCount = getCliqzData(tabId, tabHostUrl, true).trackerCount;
alert = (appsAlertCount > 0);
trackerCount = (appsCount + antiTrackingCount + adBlockingCount).toString();
diff --git a/src/classes/ConfData.js b/src/classes/ConfData.js
index 14315cac5..c4e262ae7 100644
--- a/src/classes/ConfData.js
+++ b/src/classes/ConfData.js
@@ -151,7 +151,7 @@ class ConfData {
_initProperty('site_specific_blocks', {});
_initProperty('site_specific_unblocks', {});
_initProperty('site_whitelist', []);
- _initProperty('anti_tracking_whitelist', {});
+ _initProperty('cliqz_module_whitelist', {});
_initProperty('surrogates', {});
_initProperty('version_history', []);
_initProperty('account', null);
diff --git a/src/classes/Policy.js b/src/classes/Policy.js
index 833b1a55c..547784d42 100644
--- a/src/classes/Policy.js
+++ b/src/classes/Policy.js
@@ -50,8 +50,7 @@ class Policy {
if (this.blacklisted(hostUrl)) {
return globals.BLACKLISTED;
}
- if (this.checkSiteWhitelist(hostUrl)
- || this.checkAntiTrackingWhitelist(hostUrl, trackerUrl)) {
+ if (this.checkSiteWhitelist(hostUrl) || this.checkCliqzModuleWhitelist(hostUrl, trackerUrl)) {
return globals.WHITELISTED;
}
return false;
@@ -86,14 +85,14 @@ class Policy {
* @param {string} url site url
* @return {string|boolean} corresponding whitelist entry or false, if none
*/
- checkAntiTrackingWhitelist(hostUrl, trackerUrl) {
+ checkCliqzModuleWhitelist(hostUrl, trackerUrl) {
let isWhitelisted = false;
const processedHostUrl = processUrl(hostUrl).host;
const processedTrackerUrl = processUrl(trackerUrl).host;
- const antiTrackingWhitelist = conf.anti_tracking_whitelist;
+ const cliqzModuleWhitelist = conf.cliqz_module_whitelist;
- if (antiTrackingWhitelist[processedTrackerUrl]) {
- antiTrackingWhitelist[processedTrackerUrl].hosts.some((host) => {
+ if (cliqzModuleWhitelist[processedTrackerUrl]) {
+ cliqzModuleWhitelist[processedTrackerUrl].hosts.some((host) => {
if (host === processedHostUrl) {
isWhitelisted = true;
return true;
diff --git a/src/utils/cliqzModulesData.js b/src/utils/cliqzModulesData.js
index b97b95a8e..73f045088 100644
--- a/src/utils/cliqzModulesData.js
+++ b/src/utils/cliqzModulesData.js
@@ -26,16 +26,21 @@ const { adblocker, antitracking } = cliqz.modules;
* @param {int} tabId
* @return {object} totalUnsafeCount
*/
-export function getCliqzAntiTrackingData(tabId, tabHostUrl) {
+export function getCliqzData(tabId, tabHostUrl, antiTracking) {
let totalUnsafeCount = 0;
let totalUnknownCount = 0;
+ let trackerCount = 0;
let unknownTrackerCount = 0;
const unknownTrackers = [];
- const whitelistedUrls = conf.anti_tracking_whitelist;
- if (!conf.enable_anti_tracking || !antitracking.background) {
+ const whitelistedUrls = conf.cliqz_module_whitelist;
+ const cliqzModule = antiTracking ? antitracking : adblocker;
+ const cliqzModuleEnabled = antiTracking ? conf.enable_anti_tracking : conf.enable_ad_block;
+
+ if (!cliqzModuleEnabled || !cliqzModule.background) {
return {
totalUnsafeCount,
totalUnknownCount,
+ trackerCount,
unknownTrackerCount,
unknownTrackers,
whitelistedUrls,
@@ -43,40 +48,50 @@ export function getCliqzAntiTrackingData(tabId, tabHostUrl) {
}
// Count up number of fingerprints and cookies found
- const { bugs, others } = antitracking.background.actions.getGhosteryStats(tabId);
+ const { bugs, others } = cliqzModule.background.actions.getGhosteryStats(tabId);
const bugsValues = Object.values(bugs);
const othersValues = Object.values(others);
+ const getDataPoints = (tracker) => {
+ if (antiTracking) { return tracker.cookies + tracker.fingerprints; }
+ return tracker.ads;
+ };
for (const bug of bugsValues) {
- totalUnsafeCount += bug.cookies + bug.fingerprints;
+ const dataPoints = getDataPoints(bug);
+ if (dataPoints) {
+ totalUnsafeCount += dataPoints;
+ trackerCount++;
+ }
}
for (const other of othersValues) {
let whitelisted = false;
- const scrubbed = other.cookies || other.fingerprints;
+ const dataPoints = getDataPoints(other);
other.domains.some((domain) => {
- if (conf.anti_tracking_whitelist[domain]
- && conf.anti_tracking_whitelist[domain].hosts.includes(tabHostUrl)) {
+ if (whitelistedUrls[domain]
+ && whitelistedUrls[domain].hosts.includes(tabHostUrl)) {
whitelisted = true;
return true;
}
return false;
});
- if (scrubbed) {
- totalUnsafeCount += other.cookies + other.fingerprints;
- totalUnknownCount += other.cookies + other.fingerprints;
- unknownTrackerCount += 1;
+ if (dataPoints) {
+ totalUnsafeCount += dataPoints;
+ totalUnknownCount += dataPoints;
+ trackerCount++;
+ unknownTrackerCount++;
}
- if (scrubbed || whitelisted) {
+ if (dataPoints || whitelisted) {
+ const type = antiTracking ? 'antiTracking' : 'adBlock';
const {
name, domains, ads, cookies, fingerprints
} = other;
unknownTrackers.push({
- name, domains, ads, cookies, fingerprints, whitelisted
+ name, domains, ads, cookies, fingerprints, whitelisted, type
});
}
}
@@ -84,31 +99,13 @@ export function getCliqzAntiTrackingData(tabId, tabHostUrl) {
return {
totalUnsafeCount,
totalUnknownCount,
+ trackerCount,
unknownTrackerCount,
unknownTrackers,
whitelistedUrls,
};
}
-/**
- * Get the totalCount of ads found by the Ad Blocker on this tabId
- * @memberOf BackgroundUtils
- * @param {int} tabId
- * @return {object}
- */
-export function getCliqzAdBlockingCount(tabId) {
- if (!conf.enable_ad_block || !adblocker.background) {
- return {
- totalCount: 0
- };
- }
-
- const adBlockInfo = adblocker.background.actions.getAdBlockInfoForTab(tabId);
- return {
- totalCount: adBlockInfo.totalCount || 0,
- };
-}
-
/**
* Get list of matched bug_ids from Anti-Tracking and Ad-Blocking for this
* tab, along with list of 'other' trackers found that do not match known bug_ids.
@@ -135,9 +132,9 @@ export function getCliqzGhosteryBugs(tabId) {
* @param {Function} callback
*/
export function sendCliqzModuleCounts(tabId, tabHostUrl, callback) {
- const modules = { adblock: {}, antitracking: {} };
+ const modules = { adBlock: {}, antiTracking: {} };
- modules.adblock = getCliqzAdBlockingCount(tabId);
- modules.antiTracking = getCliqzAntiTrackingData(tabId, tabHostUrl);
+ modules.adBlock = getCliqzData(tabId, tabHostUrl);
+ modules.antiTracking = getCliqzData(tabId, tabHostUrl, true);
callback(modules);
}