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

Simplify and fix logic around content settings #9

Merged
merged 2 commits into from
Dec 29, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 0 additions & 12 deletions app/actions/shieldsPanelActions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,18 +19,6 @@ export const shieldsToggled: actions.ShieldsToggled = (setting = 'allow') => {
}
}

export const adBlockToggled: actions.AdBlockToggled = () => {
return {
type: types.AD_BLOCK_TOGGLED
}
}

export const trackingProtectionToggled: actions.TrackingProtectionToggled = () => {
return {
type: types.TRACKING_PROTECTION_TOGGLED
}
}

export const resourceBlocked: actions.ResourceBlocked = (details) => {
return {
type: types.RESOURCE_BLOCKED,
Expand Down
56 changes: 37 additions & 19 deletions app/background/api/shieldsAPI.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,30 +21,32 @@ export const getShieldSettingsForTabData = (tabData?: chrome.tabs.Tab) => {
const hostname = url.hostname

return Promise.all([
chrome.contentSettings.plugins.getAsync({ primaryUrl: origin, resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_AD_BLOCK } }),
chrome.contentSettings.plugins.getAsync({ primaryUrl: origin, resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_TRACKING_PROTECTION } }),
chrome.contentSettings.plugins.getAsync({ primaryUrl: origin, resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_HTTPS_EVERYWHERE } }),
chrome.contentSettings.plugins.getAsync({ primaryUrl: origin, resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_BRAVE_SHIELDS } }),
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 })
]).then((details) => {
return {
url: url.href,
origin,
hostname,
id: tabData.id,
adBlock: details[0].setting,
trackingProtection: details[1].setting,
httpsEverywhere: details[2].setting,
javascript: details[3].setting
braveShields: details[0].setting,
ads: details[1].setting,
trackers: details[2].setting,
httpUpgradableResources: details[3].setting,
javascript: details[4].setting
}
}).catch(() => {
return {
url: url.href,
origin,
hostname,
id: tabData.id,
adBlock: 0,
trackingProtection: 0,
httpsEverywhere: 0,
ads: 0,
trackers: 0,
httpUpgradableResources: 0,
javascript: 0
}
})
Expand All @@ -71,41 +73,57 @@ export const requestShieldPanelData = (tabId: number) =>
})

/**
* Changes the ad block to be on (allow) or off (block)
* Changes the brave shields setting at origin to be allowed or 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 when the setting is set
*/
export const setAllowAdBlock = (origin: string, setting: string) =>
export const setAllowBraveShields = (origin: string, setting: string) =>
chrome.contentSettings.plugins.setAsync({
primaryPattern: origin.replace(/^(http|https):\/\//, '*://') + '/*',
resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_BRAVE_SHIELDS },
setting
})

/**
* Changes the ads at origin to be allowed or blocked.
* The ad-block service will come into effect if the ad 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 when the setting is set
*/
export const setAllowAds = (origin: string, setting: string) =>
chrome.contentSettings.plugins.setAsync({
primaryPattern: origin + '/*',
resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_AD_BLOCK },
resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_ADS },
setting
})

/**
* Changes the tracking protection to be on (allow) or off (block)
* Changes the trackers at origin to be allowed or blocked.
* The tracking-protection service will come into effect if the tracker 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 setAllowTrackingProtection = (origin: string, setting: string) =>
export const setAllowTrackers = (origin: string, setting: string) =>
chrome.contentSettings.plugins.setAsync({
primaryPattern: origin + '/*',
resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_TRACKING_PROTECTION },
resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_TRACKERS },
setting
})

/**
* Changes the HTTPS Everywhere to be on (allow) or off (block)
* Changes the http upgrdabable resources to be allows as is or blocked.
* The https-everywhere service will come into effect if the resource is marked as blocked.
* @param {string} origin the origin of the site to change the setting for
* @return a promise which resolves when the setting is set
*/
export const setAllowHTTPSEverywhere = (origin: string, setting: BlockOptions) => {
export const setAllowHTTPUpgradableResources = (origin: string, setting: BlockOptions) => {
const primaryPattern = origin.replace(/^(http|https):\/\//, '*://') + '/*'
return chrome.contentSettings.plugins.setAsync({
primaryPattern,
resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_HTTPS_EVERYWHERE },
resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_HTTP_UPGRADABLE_RESOURCES },
setting
})
}
Expand Down
78 changes: 11 additions & 67 deletions app/background/reducers/shieldsPanelReducer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,10 @@ import * as windowTypes from '../../constants/windowTypes'
import * as tabTypes from '../../constants/tabTypes'
import * as webNavigationTypes from '../../constants/webNavigationTypes'
import {
setAllowAdBlock,
setAllowTrackingProtection,
setAllowHTTPSEverywhere,
setAllowBraveShields,
setAllowAds,
setAllowTrackers,
setAllowHTTPUpgradableResources,
setAllowJavaScript,
toggleShieldsValue,
requestShieldPanelData
Expand All @@ -23,7 +24,7 @@ import { Actions } from '../../types/actions/index'
const updateBadgeText = (state: State) => {
const tabId: number = shieldsPanelState.getActiveTabId(state)
if (state.tabs[tabId]) {
const total: string = (state.tabs[tabId].adsBlocked + state.tabs[tabId].trackingProtectionBlocked).toString()
const total: string = (state.tabs[tabId].adsBlocked + state.tabs[tabId].trackersBlocked).toString()
setBadgeText(total)
}
}
Expand Down Expand Up @@ -111,28 +112,10 @@ export default function shieldsPanelReducer (state: State = { tabs: {}, windows:
{
const tabId: number = shieldsPanelState.getActiveTabId(state)
const tabData: Tab = shieldsPanelState.getActiveTabData(state)

if (!tabData) {
break
}

const p1 = setAllowAdBlock(tabData.origin, action.setting)
.catch(() => {
console.error('Could not set ad block setting')
})
const p2 = setAllowTrackingProtection(tabData.origin, action.setting)
.catch(() => {
console.error('Could not set tracking protection setting')
})
const p3 = setAllowHTTPSEverywhere(tabData.origin, action.setting)
.catch(() => {
console.error('Could not set HTTPS Everywhere setting')
})
const p4 = setAllowJavaScript(tabData.origin, action.setting)
.catch(() => {
console.error('Could not set JavaScript setting')
})
Promise.all([p1, p2, p3, p4])
setAllowBraveShields(tabData.origin, action.setting)
.then(() => {
reloadTab(tabId, true).catch(() => {
console.error('Tab reload was not successful')
Expand All @@ -143,26 +126,7 @@ export default function shieldsPanelReducer (state: State = { tabs: {}, windows:
console.error('Could not set shields')
})
state = shieldsPanelState
.updateTabShieldsData(state, tabId, { shieldsEnabled: action.setting })
break
}
case shieldsPanelTypes.AD_BLOCK_TOGGLED:
{
const tabData = shieldsPanelState.getActiveTabData(state)
if (!tabData) {
break
}

setAllowAdBlock(tabData.origin, toggleShieldsValue(tabData.adBlock))
.then(() => {
requestShieldPanelData(shieldsPanelState.getActiveTabId(state))
reloadTab(tabData.id, true).catch(() => {
console.error('Tab reload was not successful')
})
})
.catch(() => {
console.error('Could not set ad block setting')
})
.updateTabShieldsData(state, tabId, { braveShields: action.setting })
break
}
case shieldsPanelTypes.HTTPS_EVERYWHERE_TOGGLED:
Expand All @@ -172,7 +136,7 @@ export default function shieldsPanelReducer (state: State = { tabs: {}, windows:
break
}

setAllowHTTPSEverywhere(tabData.origin, toggleShieldsValue(tabData.httpsEverywhere))
setAllowHTTPUpgradableResources(tabData.origin, toggleShieldsValue(tabData.httpUpgradableResources))
.then(() => {
requestShieldPanelData(shieldsPanelState.getActiveTabId(state))
reloadTab(tabData.id, true).catch(() => {
Expand All @@ -199,25 +163,6 @@ export default function shieldsPanelReducer (state: State = { tabs: {}, windows:
})
break
}
case shieldsPanelTypes.TRACKING_PROTECTION_TOGGLED:
{
const tabData: Tab = shieldsPanelState.getActiveTabData(state)
if (!tabData) {
break
}

setAllowTrackingProtection(tabData.origin, toggleShieldsValue(tabData.trackingProtection))
.then(() => {
requestShieldPanelData(shieldsPanelState.getActiveTabId(state))
reloadTab(tabData.id, true).catch(() => {
console.error('Tab reload was not successful')
})
})
.catch(() => {
console.error('Could not set tracking protection setting')
})
break
}
case shieldsPanelTypes.RESOURCE_BLOCKED:
{
const tabId: number = action.details.tabId
Expand All @@ -237,11 +182,12 @@ export default function shieldsPanelReducer (state: State = { tabs: {}, windows:
break
}

const p1 = setAllowAdBlock(tabData.origin, action.setting)
const setting = toggleShieldsValue(action.setting)
const p1 = setAllowAds(tabData.origin, setting)
.catch(() => {
console.error('Could not set ad block setting')
})
const p2 = setAllowTrackingProtection(tabData.origin, action.setting)
const p2 = setAllowTrackers(tabData.origin, setting)
.catch(() => {
console.error('Could not set tracking protection setting')
})
Expand All @@ -255,8 +201,6 @@ export default function shieldsPanelReducer (state: State = { tabs: {}, windows:
.catch(() => {
console.error('Could not set blockers for tracking')
})
state = shieldsPanelState
.updateTabShieldsData(state, tabId, { adsTrackers: action.setting })
break
}
case shieldsPanelTypes.CONTROLS_TOGGLED:
Expand Down
15 changes: 8 additions & 7 deletions app/components/braveShields/braveShields.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -32,22 +32,23 @@ export default class BraveShields extends React.Component<Props, object> {
return (
<div data-test-id='brave-shields-panel'>
<BraveShieldsHeader
shieldsEnabled={shieldsPanelTabData.shieldsEnabled}
braveShields={shieldsPanelTabData.braveShields}
shieldsToggled={actions.shieldsToggled}
hostname={shieldsPanelTabData.hostname}
/>
<BraveShieldsStats
shieldsEnabled={shieldsPanelTabData.shieldsEnabled}
braveShields={shieldsPanelTabData.braveShields}
adsBlocked={shieldsPanelTabData.adsBlocked}
trackingProtectionBlocked={shieldsPanelTabData.trackingProtectionBlocked}
httpsEverywhereRedirected={shieldsPanelTabData.httpsEverywhereRedirected}
trackersBlocked={shieldsPanelTabData.trackersBlocked}
httpsRedirected={shieldsPanelTabData.httpsRedirected}
javascriptBlocked={shieldsPanelTabData.javascriptBlocked}
/>
<BraveShieldsControls
shieldsEnabled={shieldsPanelTabData.shieldsEnabled}
braveShields={shieldsPanelTabData.braveShields}
blockAdsTrackers={actions.blockAdsTrackers}
adsTrackers={shieldsPanelTabData.adsTrackers}
httpsEverywhere={shieldsPanelTabData.httpsEverywhere}
ads={shieldsPanelTabData.ads}
trackers={shieldsPanelTabData.trackers}
httpUpgradableResources={shieldsPanelTabData.httpUpgradableResources}
javascript={shieldsPanelTabData.javascript}
controlsToggled={actions.controlsToggled}
httpsEverywhereToggled={actions.httpsEverywhereToggled}
Expand Down
27 changes: 14 additions & 13 deletions app/components/braveShields/braveShieldsControls.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,10 @@ import { BlockOptions } from '../../types/other/blockTypes'

export interface Props {
controlsOpen: boolean
adsTrackers: string
shieldsEnabled: BlockOptions
httpsEverywhere: BlockOptions
braveShields: BlockOptions
httpUpgradableResources: BlockOptions
ads: BlockOptions
trackers: BlockOptions
javascript: BlockOptions
blockAdsTrackers: shieldActions.BlockAdsTrackers
controlsToggled: shieldActions.ControlsToggled
Expand Down Expand Up @@ -50,7 +51,7 @@ export default class BraveShieldsControls extends React.Component<Props, object>
}

render () {
const { shieldsEnabled, adsTrackers, controlsOpen, httpsEverywhere, javascript } = this.props
const { braveShields, ads, trackers, controlsOpen, httpUpgradableResources, javascript } = this.props
return (
<Grid
id='braveShieldsControls'
Expand All @@ -66,9 +67,9 @@ export default class BraveShieldsControls extends React.Component<Props, object>
onClick={this.onToggleControls}
>
<BrowserSelect
disabled={shieldsEnabled === 'block'}
disabled={braveShields === 'block'}
titleName='Ad Control'
value={adsTrackers}
value={braveShields !== 'block' && ads !== 'allow' && trackers !== 'allow' ? 'allow' : 'block'}
onChange={this.onChangeAdControl}
>
{/* TODO needs "show brave ads" */}
Expand All @@ -77,7 +78,7 @@ export default class BraveShieldsControls extends React.Component<Props, object>
</BrowserSelect>
{/* TODO @cezaraugusto */}
<BrowserSelect
disabled={shieldsEnabled === 'block'}
disabled={braveShields === 'block'}
titleName='Cookie Control'
value='someVALUE'
onChange={this.onChangeCookieControl}
Expand All @@ -94,35 +95,35 @@ export default class BraveShieldsControls extends React.Component<Props, object>
{/* TODO @cezaraugusto */}
<SwitchButton
id='httpsEverywhere'
disabled={shieldsEnabled === 'block'}
disabled={braveShields === 'block'}
rightText='HTTPS Everywhere'
checked={shieldsEnabled === 'allow' && httpsEverywhere === 'allow'}
checked={braveShields !== 'block' && httpUpgradableResources !== 'allow'}
onChange={this.onToggleHTTPSEverywhere}
/>
</Column>
<Column>
{/* TODO @cezaraugusto */}
<SwitchButton
id='blockScripts'
disabled={shieldsEnabled === 'block'}
disabled={braveShields === 'block'}
rightText='Block Scripts'
checked={shieldsEnabled === 'allow' && javascript === 'block'}
checked={braveShields !== 'block' && javascript !== 'allow'}
onChange={this.onToggleJavaScript}
/>
</Column>
<Column>
{/* TODO @cezaraugusto */}
<SwitchButton
id='fingerprintingProtection'
disabled={shieldsEnabled === 'block'}
disabled={braveShields === 'block'}
rightText='Fingerprinting Protection'
/>
</Column>
<Column>
{/* TODO @cezaraugusto */}
<SwitchButton
id='blockPhishingMalware'
disabled={shieldsEnabled === 'block'}
disabled={braveShields === 'block'}
rightText='Block Phishing/Malware'
/>
</Column>
Expand Down
Loading