diff --git a/app/actions/shieldsPanelActions.ts b/app/actions/shieldsPanelActions.ts index 7f7ae43e8940..ae6537ab9591 100644 --- a/app/actions/shieldsPanelActions.ts +++ b/app/actions/shieldsPanelActions.ts @@ -51,3 +51,9 @@ export const javascriptToggled: actions.JavascriptToggled = () => { type: types.JAVASCRIPT_TOGGLED } } + +export const fingerprintingToggled: actions.FingerprintingToggled = () => { + return { + type: types.FINGERPRINTING_TOGGLED + } +} diff --git a/app/background/api/shieldsAPI.ts b/app/background/api/shieldsAPI.ts index 71b1bcd3824d..b01149e75150 100644 --- a/app/background/api/shieldsAPI.ts +++ b/app/background/api/shieldsAPI.ts @@ -25,7 +25,8 @@ export const getShieldSettingsForTabData = (tabData?: chrome.tabs.Tab) => { chrome.contentSettings.plugins.getAsync({ primaryUrl: origin, resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_ADS } }), chrome.contentSettings.plugins.getAsync({ primaryUrl: origin, resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_TRACKERS } }), chrome.contentSettings.plugins.getAsync({ primaryUrl: origin, resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_HTTP_UPGRADABLE_RESOURCES } }), - chrome.contentSettings.javascript.getAsync({ primaryUrl: origin }) + chrome.contentSettings.javascript.getAsync({ primaryUrl: origin }), + chrome.contentSettings.plugins.getAsync({ primaryUrl: origin, resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_FINGERPRINTING } }) ]).then((details) => { return { url: url.href, @@ -36,7 +37,8 @@ export const getShieldSettingsForTabData = (tabData?: chrome.tabs.Tab) => { ads: details[1].setting, trackers: details[2].setting, httpUpgradableResources: details[3].setting, - javascript: details[4].setting + javascript: details[4].setting, + fingerprinting: details[5].setting } }).catch(() => { return { @@ -47,7 +49,8 @@ export const getShieldSettingsForTabData = (tabData?: chrome.tabs.Tab) => { ads: 0, trackers: 0, httpUpgradableResources: 0, - javascript: 0 + javascript: 0, + fingerprinting: 0 } }) } @@ -140,6 +143,20 @@ export const setAllowJavaScript = (origin: string, setting: string) => setting }) +/** + * Changes the fingerprinting at origin to be allowed or blocked. + * The fingerprinting-protection service will come into effect if the fingerprinting is marked as blocked. + * @param {string} origin the origin of the site to change the setting for + * @param {string} setting 'allow' or 'block' + * @return a promise which resolves with the setting is set + */ +export const setAllowFingerprinting = (origin: string, setting: string) => + chrome.contentSettings.plugins.setAsync({ + primaryPattern: origin + '/*', + resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_FINGERPRINTING }, + setting + }) + /** * Toggles the input value between allow and block * @return the toggled value diff --git a/app/background/reducers/shieldsPanelReducer.ts b/app/background/reducers/shieldsPanelReducer.ts index 65443639ad36..8ade30f70a15 100644 --- a/app/background/reducers/shieldsPanelReducer.ts +++ b/app/background/reducers/shieldsPanelReducer.ts @@ -12,6 +12,7 @@ import { setAllowTrackers, setAllowHTTPUpgradableResources, setAllowJavaScript, + setAllowFingerprinting, toggleShieldsValue, requestShieldPanelData } from '../api/shieldsAPI' @@ -20,6 +21,7 @@ import { reloadTab } from '../api/tabsAPI' import * as shieldsPanelState from '../../state/shieldsPanelState' import { State, Tab } from '../../types/state/shieldsPannelState' import { Actions } from '../../types/actions/index' +import { BlockOptions } from '../../types/other/blockTypes' const updateBadgeText = (state: State) => { const tabId: number = shieldsPanelState.getActiveTabId(state) @@ -210,6 +212,22 @@ export default function shieldsPanelReducer (state: State = { tabs: {}, windows: .updateTabShieldsData(state, tabId, { controlsOpen: action.setting }) break } + case shieldsPanelTypes.FINGERPRINTING_TOGGLED: + { + const tabData: Tab = shieldsPanelState.getActiveTabData(state) + const setting: BlockOptions = tabData.fingerprinting === 'block' ? 'allow' : 'block' + setAllowFingerprinting(tabData.origin, setting) + .then(() => { + requestShieldPanelData(shieldsPanelState.getActiveTabId(state)) + reloadTab(tabData.id, true).catch(() => { + console.error('Tab reload was not successful') + }) + }) + .catch(() => { + console.error('Could not set fingerprinting setting') + }) + break + } } return state } diff --git a/app/components/braveShields/braveShields.tsx b/app/components/braveShields/braveShields.tsx index 5d31d81c2b9f..95b251312f1b 100644 --- a/app/components/braveShields/braveShields.tsx +++ b/app/components/braveShields/braveShields.tsx @@ -17,6 +17,7 @@ interface Props { controlsToggled: shieldActions.ControlsToggled httpsEverywhereToggled: shieldActions.HttpsEverywhereToggled javascriptToggled: shieldActions.JavascriptToggled + fingerprintingToggled: shieldActions.FingerprintingToggled } shieldsPanelTabData: Tab } @@ -42,6 +43,7 @@ export default class BraveShields extends React.Component { trackersBlocked={shieldsPanelTabData.trackersBlocked} httpsRedirected={shieldsPanelTabData.httpsRedirected} javascriptBlocked={shieldsPanelTabData.javascriptBlocked} + fingerprintingBlocked={shieldsPanelTabData.fingerprintingBlocked} /> { httpsEverywhereToggled={actions.httpsEverywhereToggled} javascriptToggled={actions.javascriptToggled} controlsOpen={shieldsPanelTabData.controlsOpen} + fingerprinting={shieldsPanelTabData.fingerprinting} + fingerprintingToggled={actions.fingerprintingToggled} /> diff --git a/app/components/braveShields/braveShieldsControls.tsx b/app/components/braveShields/braveShieldsControls.tsx index c1a1b53d940f..7adcd4b2eb6d 100644 --- a/app/components/braveShields/braveShieldsControls.tsx +++ b/app/components/braveShields/braveShieldsControls.tsx @@ -14,10 +14,12 @@ export interface Props { ads: BlockOptions trackers: BlockOptions javascript: BlockOptions + fingerprinting: BlockOptions blockAdsTrackers: shieldActions.BlockAdsTrackers controlsToggled: shieldActions.ControlsToggled httpsEverywhereToggled: shieldActions.HttpsEverywhereToggled javascriptToggled: shieldActions.JavascriptToggled + fingerprintingToggled: shieldActions.FingerprintingToggled } export default class BraveShieldsControls extends React.Component { @@ -28,6 +30,7 @@ export default class BraveShieldsControls extends React.Component this.onToggleControls = this.onToggleControls.bind(this) this.onToggleHTTPSEverywhere = this.onToggleHTTPSEverywhere.bind(this) this.onToggleJavaScript = this.onToggleJavaScript.bind(this) + this.onToggleFingerprinting = this.onToggleFingerprinting.bind(this) } onChangeAdControl (e: HTMLSelectElement) { @@ -50,8 +53,12 @@ export default class BraveShieldsControls extends React.Component this.props.javascriptToggled() } + onToggleFingerprinting () { + this.props.fingerprintingToggled() + } + render () { - const { braveShields, ads, trackers, controlsOpen, httpUpgradableResources, javascript } = this.props + const { braveShields, ads, trackers, controlsOpen, httpUpgradableResources, javascript, fingerprinting } = this.props return ( id='fingerprintingProtection' disabled={braveShields === 'block'} rightText='Fingerprinting Protection' + checked={braveShields !== 'block' && fingerprinting === 'block'} + onChange={this.onToggleFingerprinting} /> diff --git a/app/components/braveShields/braveShieldsStats.tsx b/app/components/braveShields/braveShieldsStats.tsx index db6de83ef40b..32f9e5d8b1f4 100644 --- a/app/components/braveShields/braveShieldsStats.tsx +++ b/app/components/braveShields/braveShieldsStats.tsx @@ -12,6 +12,7 @@ export interface Props { trackersBlocked: number httpsRedirected: number javascriptBlocked: number + fingerprintingBlocked: number } export default class BraveShieldsStats extends React.Component { @@ -28,6 +29,10 @@ export default class BraveShieldsStats extends React.Component { return this.props.javascriptBlocked } + get fingerprintingBlocked (): number { + return this.props.fingerprintingBlocked + } + render () { const { braveShields } = this.props return ( @@ -77,7 +82,7 @@ export default class BraveShieldsStats extends React.Component { - + { const tabs: shieldState.Tabs = { ...state.tabs } - tabs[tabId] = { ...{ adsBlocked: 0, trackersBlocked: 0, httpsRedirected: 0, javascriptBlocked: 0 }, ...tabs[tabId] } + tabs[tabId] = { ...{ adsBlocked: 0, trackersBlocked: 0, httpsRedirected: 0, javascriptBlocked: 0, fingerprintingBlocked: 0 }, ...tabs[tabId] } if (blockType === 'ads') { tabs[tabId].adsBlocked++ } else if (blockType === 'trackers') { @@ -56,16 +58,19 @@ export const updateResourceBlocked: shieldState.UpdateResourceBlocked = (state, tabs[tabId].httpsRedirected++ } else if (blockType === 'javascript') { tabs[tabId].javascriptBlocked++ + } else if (blockType === 'fingerprinting') { + tabs[tabId].fingerprintingBlocked++ } return { ...state, tabs } } export const resetBlockingStats: shieldState.ResetBlockingStats = (state, tabId) => { const tabs: shieldState.Tabs = { ...state.tabs } - tabs[tabId] = { ...tabs[tabId], ...{ adsBlocked: 0, trackersBlocked: 0, httpsRedirected: 0, javascriptBlocked: 0 } } + tabs[tabId] = { ...tabs[tabId], ...{ adsBlocked: 0, trackersBlocked: 0, httpsRedirected: 0, javascriptBlocked: 0, fingerprintingBlocked: 0 } } tabs[tabId].adsBlocked = 0 tabs[tabId].trackersBlocked = 0 tabs[tabId].httpsRedirected = 0 tabs[tabId].javascriptBlocked = 0 + tabs[tabId].fingerprintingBlocked = 0 return { ...state, tabs } } diff --git a/app/types/actions/shieldsPanelActions.ts b/app/types/actions/shieldsPanelActions.ts index 6a9658e76568..cc9b1ffdd554 100644 --- a/app/types/actions/shieldsPanelActions.ts +++ b/app/types/actions/shieldsPanelActions.ts @@ -11,6 +11,7 @@ export interface ShieldDetails { trackers: BlockOptions httpUpgradableResources: BlockOptions javascript: BlockOptions + fingerprinting: BlockOptions origin: string hostname: string } @@ -81,6 +82,14 @@ export interface JavascriptToggled { (): JavascriptToggledReturn } +interface FingerprintingToggledReturn { + type: types.FINGERPRINTING_TOGGLED +} + +export interface FingerprintingToggled { + (): FingerprintingToggledReturn +} + export type shieldPanelActions = ShieldsPanelDataUpdatedReturn | ShieldsToggledReturn | @@ -88,4 +97,5 @@ export type shieldPanelActions = BlockAdsTrackersReturn | ControlsToggledReturn | HttpsEverywhereToggledReturn | - JavascriptToggledReturn + JavascriptToggledReturn | + FingerprintingToggledReturn diff --git a/app/types/constants/resourceIdentifiers.ts b/app/types/constants/resourceIdentifiers.ts index 961b815a7ea7..5053f7534b86 100644 --- a/app/types/constants/resourceIdentifiers.ts +++ b/app/types/constants/resourceIdentifiers.ts @@ -11,3 +11,4 @@ import * as types from '../../constants/resourceIdentifiers' export type RESOURCE_IDENTIFIER_ADS = typeof types.RESOURCE_IDENTIFIER_ADS export type RESOURCE_IDENTIFIER_TRACKERS = typeof types.RESOURCE_IDENTIFIER_TRACKERS export type RESOURCE_IDENTIFIER_HTTP_UPGRADABLE_RESOURCES = typeof types.RESOURCE_IDENTIFIER_HTTP_UPGRADABLE_RESOURCES +export type RESOURCE_IDENTIFIER_FINGERPRINTING = typeof types.RESOURCE_IDENTIFIER_FINGERPRINTING diff --git a/app/types/constants/shieldsPanelTypes.ts b/app/types/constants/shieldsPanelTypes.ts index e36b9f7cece2..b01108ec70c3 100644 --- a/app/types/constants/shieldsPanelTypes.ts +++ b/app/types/constants/shieldsPanelTypes.ts @@ -11,3 +11,4 @@ export type BLOCK_ADS_TRACKERS = typeof types.BLOCK_ADS_TRACKERS export type CONTROLS_TOGGLED = typeof types.CONTROLS_TOGGLED export type HTTPS_EVERYWHERE_TOGGLED = typeof types.HTTPS_EVERYWHERE_TOGGLED export type JAVASCRIPT_TOGGLED = typeof types.JAVASCRIPT_TOGGLED +export type FINGERPRINTING_TOGGLED = typeof types.FINGERPRINTING_TOGGLED diff --git a/app/types/other/blockTypes.ts b/app/types/other/blockTypes.ts index 08dab4f7a665..7510651ea3a7 100644 --- a/app/types/other/blockTypes.ts +++ b/app/types/other/blockTypes.ts @@ -2,5 +2,5 @@ * 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/. */ -export type BlockTypes = 'ads' | 'trackers' | 'httpUpgradableResources' | 'javascript' +export type BlockTypes = 'ads' | 'trackers' | 'httpUpgradableResources' | 'javascript' | 'fingerprinting' export type BlockOptions = 'allow' | 'block' diff --git a/app/types/state/shieldsPannelState.ts b/app/types/state/shieldsPannelState.ts index eda45436e341..afe0f0c54509 100644 --- a/app/types/state/shieldsPannelState.ts +++ b/app/types/state/shieldsPannelState.ts @@ -19,6 +19,8 @@ export interface Tab { trackers: BlockOptions trackersBlocked: number url: string + fingerprinting: BlockOptions + fingerprintingBlocked: number } export interface Tabs { diff --git a/test/app/actions/shieldsPanelActionsTest.ts b/test/app/actions/shieldsPanelActionsTest.ts index fcdc1cac0309..66085a24a825 100644 --- a/test/app/actions/shieldsPanelActionsTest.ts +++ b/test/app/actions/shieldsPanelActionsTest.ts @@ -19,7 +19,8 @@ describe('shieldsPanelActions', () => { origin: 'https://www.brave.com', hostname: 'www.brave.com', id: 1, - javascript: 'allow' + javascript: 'allow', + fingerprinting: 'allow' } assert.deepEqual(actions.shieldsPanelDataUpdated(details), { type: types.SHIELDS_PANEL_DATA_UPDATED, @@ -73,4 +74,10 @@ describe('shieldsPanelActions', () => { setting }) }) + + it('fingerprintingToggled action', () => { + assert.deepEqual(actions.fingerprintingToggled(), { + type: types.FINGERPRINTING_TOGGLED + }) + }) }) diff --git a/test/app/background/api/shieldsAPITest.ts b/test/app/background/api/shieldsAPITest.ts index d8edffda03c2..c319cb80a9da 100644 --- a/test/app/background/api/shieldsAPITest.ts +++ b/test/app/background/api/shieldsAPITest.ts @@ -44,6 +44,7 @@ describe('Shields API', () => { httpUpgradableResources: 'block', javascript: 'block', braveShields: 'block', + fingerprinting: 'block', id: 5 }) cb() @@ -97,7 +98,8 @@ describe('Shields API', () => { ads: 'block', trackers: 'block', httpUpgradableResources: 'block', - javascript: 'block' + javascript: 'block', + fingerprinting: 'block' } this.p @@ -227,6 +229,34 @@ describe('Shields API', () => { }) }) + describe('setAllowFingerprinting', function () { + before(function () { + this.spy = sinon.spy(chrome.contentSettings.plugins, 'setAsync') + this.p = shieldsAPI.setAllowFingerprinting('https://www.brave.com', 'block') + }) + after(function () { + this.spy.restore() + }) + it('calls chrome.contentSettings.plugins with the correct args', function () { + const arg0 = this.spy.getCall(0).args[0] + assert.deepEqual(arg0, { + primaryPattern: 'https://www.brave.com/*', + resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_FINGERPRINTING }, + setting: 'block' + }) + }) + it('passes only 1 arg to chrome.contentSettings.plugins', function () { + assert.equal(this.spy.getCall(0).args.length, 1) + }) + it('resolves the returned promise', function (cb) { + this.p + .then(cb) + .catch((e: Error) => { + console.error(e.toString()) + }) + }) + }) + describe('toggleShieldsValue', function () { it('toggles \'allow\' to \'block\'', function () { assert.equal(shieldsAPI.toggleShieldsValue('allow'), 'block') diff --git a/test/app/background/reducers/shieldsPanelReducerTest.ts b/test/app/background/reducers/shieldsPanelReducerTest.ts index 1c355bcb3db6..123c5bc0cb76 100644 --- a/test/app/background/reducers/shieldsPanelReducerTest.ts +++ b/test/app/background/reducers/shieldsPanelReducerTest.ts @@ -226,7 +226,8 @@ describe('braveShieldsPanelReducer', () => { ads: 'block', trackers: 'block', httpUpgradableResources: 'block', - javascript: 'block' + javascript: 'block', + fingerprinting: 'block' } assert.deepEqual( shieldsPanelReducer(initialState.shieldsPanel, { @@ -240,6 +241,7 @@ describe('braveShieldsPanelReducer', () => { trackersBlocked: 0, httpsRedirected: 0, javascriptBlocked: 0, + fingerprintingBlocked: 0, hostname: 'brave.com', origin: 'brave.com', id: tabId, @@ -247,6 +249,7 @@ describe('braveShieldsPanelReducer', () => { trackers: 'block', httpUpgradableResources: 'block', javascript: 'block', + fingerprinting: 'block', controlsOpen: true, braveShields: 'allow' } @@ -268,11 +271,13 @@ describe('braveShieldsPanelReducer', () => { trackersBlocked: 0, httpsRedirected: 0, javascriptBlocked: 0, + fingerprintingBlocked: 0, id: 2, httpUpgradableResources: 'block', javascript: 'block', trackers: 'block', - ads: 'block' + ads: 'block', + fingerprinting: 'block' } }, windows: { @@ -336,6 +341,24 @@ describe('braveShieldsPanelReducer', () => { }) }) + describe('FINGERPRINTING_TOGGLED', function () { + before(function () { + this.reloadTabSpy = sinon.spy(tabsAPI, 'reloadTab') + this.setAllowFingerprintingSpy = sinon.spy(shieldsAPI, 'setAllowFingerprinting') + }) + after(function () { + this.reloadTabSpy.restore() + this.setAllowFingerprintingSpy.restore() + }) + it('should call setAllowFingerprinting', function () { + assert.deepEqual( + shieldsPanelReducer(state, { + type: types.FINGERPRINTING_TOGGLED + }), state) + assert.equal(this.setAllowFingerprintingSpy.withArgs(origin, 'allow').calledOnce, true) + }) + }) + describe('RESOURCE_BLOCKED', function () { it('increments for JS blocking', function () { let nextState = shieldsPanelReducer(state, { @@ -355,13 +378,50 @@ describe('braveShieldsPanelReducer', () => { trackersBlocked: 0, httpsRedirected: 0, javascriptBlocked: 1, + fingerprintingBlocked: 0, controlsOpen: true, braveShields: 'allow', httpUpgradableResources: 'block', id: 2, javascript: 'block', trackers: 'block', - ads: 'block' + ads: 'block', + fingerprinting: 'block' + } + }, + windows: { + 1: 2 + } + }) + }) + + it('increments for fingerprinting blocked', function () { + let nextState = shieldsPanelReducer(state, { + type: types.RESOURCE_BLOCKED, + details: { + blockType: 'fingerprinting', + tabId: 2 + } + }) + assert.deepEqual(nextState, { + currentWindowId: 1, + tabs: { + 2: { + origin: 'https://brave.com', + hostname: 'brave.com', + adsBlocked: 0, + trackersBlocked: 0, + httpsRedirected: 0, + javascriptBlocked: 0, + fingerprintingBlocked: 1, + controlsOpen: true, + braveShields: 'allow', + httpUpgradableResources: 'block', + id: 2, + javascript: 'block', + trackers: 'block', + ads: 'block', + fingerprinting: 'block' } }, windows: { @@ -388,13 +448,15 @@ describe('braveShieldsPanelReducer', () => { trackersBlocked: 0, httpsRedirected: 0, javascriptBlocked: 0, + fingerprintingBlocked: 0, controlsOpen: true, braveShields: 'allow', httpUpgradableResources: 'block', id: 2, javascript: 'block', trackers: 'block', - ads: 'block' + ads: 'block', + fingerprinting: 'block' } }, windows: { @@ -419,13 +481,15 @@ describe('braveShieldsPanelReducer', () => { trackersBlocked: 0, httpsRedirected: 0, javascriptBlocked: 0, + fingerprintingBlocked: 0, controlsOpen: true, braveShields: 'allow', httpUpgradableResources: 'block', id: 2, javascript: 'block', trackers: 'block', - ads: 'block' + ads: 'block', + fingerprinting: 'block' } }, windows: { @@ -449,6 +513,7 @@ describe('braveShieldsPanelReducer', () => { trackersBlocked: 0, httpsRedirected: 0, javascriptBlocked: 0, + fingerprintingBlocked: 0, origin: 'https://brave.com', hostname: 'brave.com', controlsOpen: true, @@ -457,7 +522,8 @@ describe('braveShieldsPanelReducer', () => { id: 2, javascript: 'block', trackers: 'block', - ads: 'block' + ads: 'block', + fingerprinting: 'block' } }, windows: { @@ -483,19 +549,22 @@ describe('braveShieldsPanelReducer', () => { trackersBlocked: 0, httpsRedirected: 0, javascriptBlocked: 0, + fingerprintingBlocked: 0, controlsOpen: true, braveShields: 'allow', httpUpgradableResources: 'block', id: 2, javascript: 'block', trackers: 'block', - ads: 'block' + ads: 'block', + fingerprinting: 'block' }, 3: { adsBlocked: 1, trackersBlocked: 0, httpsRedirected: 0, - javascriptBlocked: 0 + javascriptBlocked: 0, + fingerprintingBlocked: 0 } }, windows: { @@ -521,13 +590,15 @@ describe('braveShieldsPanelReducer', () => { trackersBlocked: 0, httpsRedirected: 0, javascriptBlocked: 0, + fingerprintingBlocked: 0, controlsOpen: true, braveShields: 'allow', httpUpgradableResources: 'block', id: 2, javascript: 'block', trackers: 'block', - ads: 'block' + ads: 'block', + fingerprinting: 'block' } }, windows: { @@ -552,13 +623,15 @@ describe('braveShieldsPanelReducer', () => { trackersBlocked: 1, httpsRedirected: 0, javascriptBlocked: 0, + fingerprintingBlocked: 0, controlsOpen: true, braveShields: 'allow', httpUpgradableResources: 'block', id: 2, javascript: 'block', trackers: 'block', - ads: 'block' + ads: 'block', + fingerprinting: 'block' } }, windows: { @@ -582,13 +655,15 @@ describe('braveShieldsPanelReducer', () => { trackersBlocked: 1, httpsRedirected: 1, javascriptBlocked: 0, + fingerprintingBlocked: 0, controlsOpen: true, braveShields: 'allow', httpUpgradableResources: 'block', id: 2, javascript: 'block', trackers: 'block', - ads: 'block' + ads: 'block', + fingerprinting: 'block' } }, windows: { @@ -612,13 +687,47 @@ describe('braveShieldsPanelReducer', () => { trackersBlocked: 1, httpsRedirected: 1, javascriptBlocked: 1, + fingerprintingBlocked: 0, + controlsOpen: true, + braveShields: 'allow', + httpUpgradableResources: 'block', + id: 2, + javascript: 'block', + trackers: 'block', + ads: 'block', + fingerprinting: 'block' + } + }, + windows: { + 1: 2 + } + }) + nextState = shieldsPanelReducer(nextState, { + type: types.RESOURCE_BLOCKED, + details: { + blockType: 'fingerprinting', + tabId: 2 + } + }) + assert.deepEqual(nextState, { + currentWindowId: 1, + tabs: { + 2: { + origin: 'https://brave.com', + hostname: 'brave.com', + adsBlocked: 1, + trackersBlocked: 1, + httpsRedirected: 1, + javascriptBlocked: 1, + fingerprintingBlocked: 1, controlsOpen: true, braveShields: 'allow', httpUpgradableResources: 'block', id: 2, javascript: 'block', trackers: 'block', - ads: 'block' + ads: 'block', + fingerprinting: 'block' } }, windows: { diff --git a/test/app/components/braveShields/braveShieldsControlsTest.tsx b/test/app/components/braveShields/braveShieldsControlsTest.tsx index 6c871b08fc1a..544c260765c3 100644 --- a/test/app/components/braveShields/braveShieldsControlsTest.tsx +++ b/test/app/components/braveShields/braveShieldsControlsTest.tsx @@ -20,6 +20,7 @@ function setup () { ads: 'allow', trackers: 'allow', javascript: 'block', + fingerprinting: 'block', blockAdsTrackers: (setting: BlockOptions) => { return { type: actionTypes.BLOCK_ADS_TRACKERS, @@ -41,7 +42,10 @@ function setup () { return { type: actionTypes.JAVASCRIPT_TOGGLED } - } + }, + fingerprintingToggled: () => { + return { + type: actionTypes.FINGERPRINTING_TOGGLED } const renderer = renderIntoDocument() as React.Component diff --git a/test/app/components/braveShields/braveShieldsStatsTest.tsx b/test/app/components/braveShields/braveShieldsStatsTest.tsx index b772930a4840..c3f375e9a047 100644 --- a/test/app/components/braveShields/braveShieldsStatsTest.tsx +++ b/test/app/components/braveShields/braveShieldsStatsTest.tsx @@ -17,7 +17,8 @@ function setup () { adsBlocked: 1, trackersBlocked: 2, httpsRedirected: 3, - javascriptBlocked: 4 + javascriptBlocked: 4, + fingerprintingBlocked: 5 } const renderer = renderIntoDocument() as React.Component const result = renderer.render() as React.ReactElement diff --git a/test/app/state/shieldsPanelStateTest.ts b/test/app/state/shieldsPanelStateTest.ts index 5d34f4038d79..12b43a01d656 100644 --- a/test/app/state/shieldsPanelStateTest.ts +++ b/test/app/state/shieldsPanelStateTest.ts @@ -17,7 +17,8 @@ const state: State = deepFreeze({ ads: 'block', trackers: 'block', httpUpgradableResources: 'block', - javascript: 'block' + javascript: 'block', + fingerprinting: 'block' }, 3: { id: 3 @@ -45,7 +46,8 @@ describe('shieldsPanelState test', () => { ads: 'block', trackers: 'block', httpUpgradableResources: 'block', - javascript: 'block' + javascript: 'block', + fingerprinting: 'block' }) }) }) @@ -59,7 +61,8 @@ describe('shieldsPanelState test', () => { ads: 'block', trackers: 'block', httpUpgradableResources: 'block', - javascript: 'block' + javascript: 'block', + fingerprinting: 'block' }, 3: { id: 3 @@ -83,7 +86,8 @@ describe('shieldsPanelState test', () => { ads: 'block', trackers: 'block', httpUpgradableResources: 'block', - javascript: 'block' + javascript: 'block', + fingerprinting: 'block' }, 3: { id: 3 @@ -109,7 +113,8 @@ describe('shieldsPanelState test', () => { ads: 'block', trackers: 'block', httpUpgradableResources: 'block', - javascript: 'block' + javascript: 'block', + fingerprinting: 'block' }, 3: { id: 3 @@ -132,7 +137,8 @@ describe('shieldsPanelState test', () => { ads: 'block', trackers: 'block', httpUpgradableResources: 'block', - javascript: 'block' + javascript: 'block', + fingerprinting: 'block' }, 3: { id: 3 @@ -157,7 +163,8 @@ describe('shieldsPanelState test', () => { ads: 'block', trackers: 'block', httpUpgradableResources: 'block', - javascript: 'block' + javascript: 'block', + fingerprinting: 'block' }, 3: { id: 3 @@ -180,7 +187,8 @@ describe('shieldsPanelState test', () => { ads: 'allow', trackers: 'allow', httpUpgradableResources: 'allow', - javascript: 'allow' + javascript: 'allow', + fingerprinting: 'allow' }), { currentWindowId: 1, tabs: { @@ -190,12 +198,14 @@ describe('shieldsPanelState test', () => { trackers: 'allow', httpUpgradableResources: 'allow', javascript: 'allow', + fingerprinting: 'allow', controlsOpen: true, braveShields: 'allow', adsBlocked: 0, trackersBlocked: 0, httpsRedirected: 0, - javascriptBlocked: 0 + javascriptBlocked: 0, + fingerprintingBlocked: 0 }, 3: { id: 3 @@ -223,10 +233,12 @@ describe('shieldsPanelState test', () => { trackers: 'block', httpUpgradableResources: 'block', javascript: 'block', + fingerprinting: 'block', adsBlocked: 3, trackersBlocked: 4444, httpsRedirected: 5, javascriptBlocked: 5, + fingerprintingBlocked: 5, controlsOpen: true, hostname: 'https://brave.com', origin: 'https://brave.com', @@ -247,6 +259,8 @@ describe('shieldsPanelState test', () => { braveShields: 'block', trackers: 'block', trackersBlocked: 0, + fingerprinting: 'block', + fingerprintingBlocked: 0, url: 'https://brave.com' }, 4: { @@ -263,6 +277,8 @@ describe('shieldsPanelState test', () => { braveShields: 'block', trackers: 'block', trackersBlocked: 0, + fingerprinting: 'block', + fingerprintingBlocked: 0, url: 'https://brave.com' } }, @@ -276,6 +292,7 @@ describe('shieldsPanelState test', () => { stateWithStats.tabs[this.tabId].trackersBlocked = 4 stateWithStats.tabs[this.tabId].httpsRedirected = 5 stateWithStats.tabs[this.tabId].javascriptBlocked = 6 + stateWithStats.tabs[this.tabId].fingerprintingBlocked = 7 assert.deepEqual(shieldsPanelState.resetBlockingStats(stateWithStats, this.tabId), { currentWindowId: 1, tabs: { @@ -285,10 +302,12 @@ describe('shieldsPanelState test', () => { trackers: 'block', httpUpgradableResources: 'block', javascript: 'block', + fingerprinting: 'block', adsBlocked: 0, trackersBlocked: 0, httpsRedirected: 0, javascriptBlocked: 0, + fingerprintingBlocked: 0, controlsOpen: true, hostname: 'https://brave.com', origin: 'https://brave.com', @@ -309,6 +328,8 @@ describe('shieldsPanelState test', () => { braveShields: 'block', trackers: 'block', trackersBlocked: 0, + fingerprinting: 'block', + fingerprintingBlocked: 0, url: 'https://brave.com' }, 4: { @@ -325,6 +346,8 @@ describe('shieldsPanelState test', () => { braveShields: 'block', trackers: 'block', trackersBlocked: 0, + fingerprinting: 'block', + fingerprintingBlocked: 0, url: 'https://brave.com' } }, @@ -353,6 +376,8 @@ describe('shieldsPanelState test', () => { braveShields: 'block', trackers: 'block', trackersBlocked: 0, + fingerprinting: 'block', + fingerprintingBlocked: 0, url: 'https://brave.com' }, 3: { @@ -369,6 +394,8 @@ describe('shieldsPanelState test', () => { braveShields: 'block', trackers: 'block', trackersBlocked: 0, + fingerprinting: 'block', + fingerprintingBlocked: 0, url: 'https://brave.com' }, 4: { @@ -385,6 +412,8 @@ describe('shieldsPanelState test', () => { braveShields: 'block', trackers: 'block', trackersBlocked: 4444, + fingerprinting: 'block', + fingerprintingBlocked: 5, url: 'https://brave.com' } }, @@ -411,6 +440,8 @@ describe('shieldsPanelState test', () => { braveShields: 'block', trackers: 'block', trackersBlocked: 0, + fingerprinting: 'block', + fingerprintingBlocked: 0, url: 'https://brave.com' }, 3: { @@ -427,6 +458,8 @@ describe('shieldsPanelState test', () => { braveShields: 'block', trackers: 'block', trackersBlocked: 0, + fingerprinting: 'block', + fingerprintingBlocked: 0, url: 'https://brave.com' }, 4: { @@ -443,6 +476,8 @@ describe('shieldsPanelState test', () => { braveShields: 'block', trackers: 'block', trackersBlocked: 0, + fingerprinting: 'block', + fingerprintingBlocked: 0, url: 'https://brave.com' } }, @@ -465,10 +500,12 @@ describe('shieldsPanelState test', () => { trackers: 'block', httpUpgradableResources: 'block', javascript: 'block', + fingerprinting: 'block', adsBlocked: 1, trackersBlocked: 0, httpsRedirected: 0, - javascriptBlocked: 0 + javascriptBlocked: 0, + fingerprintingBlocked: 0 }, 3: { id: 3 @@ -494,10 +531,12 @@ describe('shieldsPanelState test', () => { trackers: 'block', httpUpgradableResources: 'block', javascript: 'block', + fingerprinting: 'block', adsBlocked: 1, trackersBlocked: 0, httpsRedirected: 0, - javascriptBlocked: 0 + javascriptBlocked: 0, + fingerprintingBlocked: 0 }, 3: { id: 3 diff --git a/test/testData.ts b/test/testData.ts index a3c50b8ff70e..d02f4dfe6561 100644 --- a/test/testData.ts +++ b/test/testData.ts @@ -24,9 +24,11 @@ export const tabs: Tabs = { trackers: 'block', httpUpgradableResources: 'block', javascript: 'block', + fingerprinting: 'block', controlsOpen: false, httpsRedirected: 0, javascriptBlocked: 0, + fingerprintingBlocked: 0, braveShields: 'block', trackersBlocked: 0 }