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

Commit f44b34f

Browse files
authored
Merge pull request #9 from brave/simplify-and-fix
Simplify and fix logic around content settings
2 parents 2a08cb8 + 4b2e832 commit f44b34f

25 files changed

+363
-507
lines changed

app/actions/shieldsPanelActions.ts

-12
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,6 @@ export const shieldsToggled: actions.ShieldsToggled = (setting = 'allow') => {
1919
}
2020
}
2121

22-
export const adBlockToggled: actions.AdBlockToggled = () => {
23-
return {
24-
type: types.AD_BLOCK_TOGGLED
25-
}
26-
}
27-
28-
export const trackingProtectionToggled: actions.TrackingProtectionToggled = () => {
29-
return {
30-
type: types.TRACKING_PROTECTION_TOGGLED
31-
}
32-
}
33-
3422
export const resourceBlocked: actions.ResourceBlocked = (details) => {
3523
return {
3624
type: types.RESOURCE_BLOCKED,

app/background/api/shieldsAPI.ts

+37-19
Original file line numberDiff line numberDiff line change
@@ -21,30 +21,32 @@ export const getShieldSettingsForTabData = (tabData?: chrome.tabs.Tab) => {
2121
const hostname = url.hostname
2222

2323
return Promise.all([
24-
chrome.contentSettings.plugins.getAsync({ primaryUrl: origin, resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_AD_BLOCK } }),
25-
chrome.contentSettings.plugins.getAsync({ primaryUrl: origin, resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_TRACKING_PROTECTION } }),
26-
chrome.contentSettings.plugins.getAsync({ primaryUrl: origin, resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_HTTPS_EVERYWHERE } }),
24+
chrome.contentSettings.plugins.getAsync({ primaryUrl: origin, resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_BRAVE_SHIELDS } }),
25+
chrome.contentSettings.plugins.getAsync({ primaryUrl: origin, resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_ADS } }),
26+
chrome.contentSettings.plugins.getAsync({ primaryUrl: origin, resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_TRACKERS } }),
27+
chrome.contentSettings.plugins.getAsync({ primaryUrl: origin, resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_HTTP_UPGRADABLE_RESOURCES } }),
2728
chrome.contentSettings.javascript.getAsync({ primaryUrl: origin })
2829
]).then((details) => {
2930
return {
3031
url: url.href,
3132
origin,
3233
hostname,
3334
id: tabData.id,
34-
adBlock: details[0].setting,
35-
trackingProtection: details[1].setting,
36-
httpsEverywhere: details[2].setting,
37-
javascript: details[3].setting
35+
braveShields: details[0].setting,
36+
ads: details[1].setting,
37+
trackers: details[2].setting,
38+
httpUpgradableResources: details[3].setting,
39+
javascript: details[4].setting
3840
}
3941
}).catch(() => {
4042
return {
4143
url: url.href,
4244
origin,
4345
hostname,
4446
id: tabData.id,
45-
adBlock: 0,
46-
trackingProtection: 0,
47-
httpsEverywhere: 0,
47+
ads: 0,
48+
trackers: 0,
49+
httpUpgradableResources: 0,
4850
javascript: 0
4951
}
5052
})
@@ -71,41 +73,57 @@ export const requestShieldPanelData = (tabId: number) =>
7173
})
7274

7375
/**
74-
* Changes the ad block to be on (allow) or off (block)
76+
* Changes the brave shields setting at origin to be allowed or blocked.
7577
* @param {string} origin the origin of the site to change the setting for
7678
* @param {string} setting 'allow' or 'block'
7779
* @return a promise which resolves when the setting is set
7880
*/
79-
export const setAllowAdBlock = (origin: string, setting: string) =>
81+
export const setAllowBraveShields = (origin: string, setting: string) =>
82+
chrome.contentSettings.plugins.setAsync({
83+
primaryPattern: origin.replace(/^(http|https):\/\//, '*://') + '/*',
84+
resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_BRAVE_SHIELDS },
85+
setting
86+
})
87+
88+
/**
89+
* Changes the ads at origin to be allowed or blocked.
90+
* The ad-block service will come into effect if the ad is marked as blocked.
91+
* @param {string} origin the origin of the site to change the setting for
92+
* @param {string} setting 'allow' or 'block'
93+
* @return a promise which resolves when the setting is set
94+
*/
95+
export const setAllowAds = (origin: string, setting: string) =>
8096
chrome.contentSettings.plugins.setAsync({
8197
primaryPattern: origin + '/*',
82-
resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_AD_BLOCK },
98+
resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_ADS },
8399
setting
84100
})
85101

86102
/**
87-
* Changes the tracking protection to be on (allow) or off (block)
103+
* Changes the trackers at origin to be allowed or blocked.
104+
* The tracking-protection service will come into effect if the tracker is marked as blocked.
88105
* @param {string} origin the origin of the site to change the setting for
89106
* @param {string} setting 'allow' or 'block'
90107
* @return a promise which resolves with the setting is set
91108
*/
92-
export const setAllowTrackingProtection = (origin: string, setting: string) =>
109+
export const setAllowTrackers = (origin: string, setting: string) =>
93110
chrome.contentSettings.plugins.setAsync({
94111
primaryPattern: origin + '/*',
95-
resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_TRACKING_PROTECTION },
112+
resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_TRACKERS },
96113
setting
97114
})
98115

99116
/**
100-
* Changes the HTTPS Everywhere to be on (allow) or off (block)
117+
* Changes the http upgrdabable resources to be allows as is or blocked.
118+
* The https-everywhere service will come into effect if the resource is marked as blocked.
101119
* @param {string} origin the origin of the site to change the setting for
102120
* @return a promise which resolves when the setting is set
103121
*/
104-
export const setAllowHTTPSEverywhere = (origin: string, setting: BlockOptions) => {
122+
export const setAllowHTTPUpgradableResources = (origin: string, setting: BlockOptions) => {
105123
const primaryPattern = origin.replace(/^(http|https):\/\//, '*://') + '/*'
106124
return chrome.contentSettings.plugins.setAsync({
107125
primaryPattern,
108-
resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_HTTPS_EVERYWHERE },
126+
resourceIdentifier: { id: resourceIdentifiers.RESOURCE_IDENTIFIER_HTTP_UPGRADABLE_RESOURCES },
109127
setting
110128
})
111129
}

app/background/reducers/shieldsPanelReducer.ts

+11-67
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,10 @@ import * as windowTypes from '../../constants/windowTypes'
77
import * as tabTypes from '../../constants/tabTypes'
88
import * as webNavigationTypes from '../../constants/webNavigationTypes'
99
import {
10-
setAllowAdBlock,
11-
setAllowTrackingProtection,
12-
setAllowHTTPSEverywhere,
10+
setAllowBraveShields,
11+
setAllowAds,
12+
setAllowTrackers,
13+
setAllowHTTPUpgradableResources,
1314
setAllowJavaScript,
1415
toggleShieldsValue,
1516
requestShieldPanelData
@@ -23,7 +24,7 @@ import { Actions } from '../../types/actions/index'
2324
const updateBadgeText = (state: State) => {
2425
const tabId: number = shieldsPanelState.getActiveTabId(state)
2526
if (state.tabs[tabId]) {
26-
const total: string = (state.tabs[tabId].adsBlocked + state.tabs[tabId].trackingProtectionBlocked).toString()
27+
const total: string = (state.tabs[tabId].adsBlocked + state.tabs[tabId].trackersBlocked).toString()
2728
setBadgeText(total)
2829
}
2930
}
@@ -111,28 +112,10 @@ export default function shieldsPanelReducer (state: State = { tabs: {}, windows:
111112
{
112113
const tabId: number = shieldsPanelState.getActiveTabId(state)
113114
const tabData: Tab = shieldsPanelState.getActiveTabData(state)
114-
115115
if (!tabData) {
116116
break
117117
}
118-
119-
const p1 = setAllowAdBlock(tabData.origin, action.setting)
120-
.catch(() => {
121-
console.error('Could not set ad block setting')
122-
})
123-
const p2 = setAllowTrackingProtection(tabData.origin, action.setting)
124-
.catch(() => {
125-
console.error('Could not set tracking protection setting')
126-
})
127-
const p3 = setAllowHTTPSEverywhere(tabData.origin, action.setting)
128-
.catch(() => {
129-
console.error('Could not set HTTPS Everywhere setting')
130-
})
131-
const p4 = setAllowJavaScript(tabData.origin, action.setting)
132-
.catch(() => {
133-
console.error('Could not set JavaScript setting')
134-
})
135-
Promise.all([p1, p2, p3, p4])
118+
setAllowBraveShields(tabData.origin, action.setting)
136119
.then(() => {
137120
reloadTab(tabId, true).catch(() => {
138121
console.error('Tab reload was not successful')
@@ -143,26 +126,7 @@ export default function shieldsPanelReducer (state: State = { tabs: {}, windows:
143126
console.error('Could not set shields')
144127
})
145128
state = shieldsPanelState
146-
.updateTabShieldsData(state, tabId, { shieldsEnabled: action.setting })
147-
break
148-
}
149-
case shieldsPanelTypes.AD_BLOCK_TOGGLED:
150-
{
151-
const tabData = shieldsPanelState.getActiveTabData(state)
152-
if (!tabData) {
153-
break
154-
}
155-
156-
setAllowAdBlock(tabData.origin, toggleShieldsValue(tabData.adBlock))
157-
.then(() => {
158-
requestShieldPanelData(shieldsPanelState.getActiveTabId(state))
159-
reloadTab(tabData.id, true).catch(() => {
160-
console.error('Tab reload was not successful')
161-
})
162-
})
163-
.catch(() => {
164-
console.error('Could not set ad block setting')
165-
})
129+
.updateTabShieldsData(state, tabId, { braveShields: action.setting })
166130
break
167131
}
168132
case shieldsPanelTypes.HTTPS_EVERYWHERE_TOGGLED:
@@ -172,7 +136,7 @@ export default function shieldsPanelReducer (state: State = { tabs: {}, windows:
172136
break
173137
}
174138

175-
setAllowHTTPSEverywhere(tabData.origin, toggleShieldsValue(tabData.httpsEverywhere))
139+
setAllowHTTPUpgradableResources(tabData.origin, toggleShieldsValue(tabData.httpUpgradableResources))
176140
.then(() => {
177141
requestShieldPanelData(shieldsPanelState.getActiveTabId(state))
178142
reloadTab(tabData.id, true).catch(() => {
@@ -199,25 +163,6 @@ export default function shieldsPanelReducer (state: State = { tabs: {}, windows:
199163
})
200164
break
201165
}
202-
case shieldsPanelTypes.TRACKING_PROTECTION_TOGGLED:
203-
{
204-
const tabData: Tab = shieldsPanelState.getActiveTabData(state)
205-
if (!tabData) {
206-
break
207-
}
208-
209-
setAllowTrackingProtection(tabData.origin, toggleShieldsValue(tabData.trackingProtection))
210-
.then(() => {
211-
requestShieldPanelData(shieldsPanelState.getActiveTabId(state))
212-
reloadTab(tabData.id, true).catch(() => {
213-
console.error('Tab reload was not successful')
214-
})
215-
})
216-
.catch(() => {
217-
console.error('Could not set tracking protection setting')
218-
})
219-
break
220-
}
221166
case shieldsPanelTypes.RESOURCE_BLOCKED:
222167
{
223168
const tabId: number = action.details.tabId
@@ -237,11 +182,12 @@ export default function shieldsPanelReducer (state: State = { tabs: {}, windows:
237182
break
238183
}
239184

240-
const p1 = setAllowAdBlock(tabData.origin, action.setting)
185+
const setting = toggleShieldsValue(action.setting)
186+
const p1 = setAllowAds(tabData.origin, setting)
241187
.catch(() => {
242188
console.error('Could not set ad block setting')
243189
})
244-
const p2 = setAllowTrackingProtection(tabData.origin, action.setting)
190+
const p2 = setAllowTrackers(tabData.origin, setting)
245191
.catch(() => {
246192
console.error('Could not set tracking protection setting')
247193
})
@@ -255,8 +201,6 @@ export default function shieldsPanelReducer (state: State = { tabs: {}, windows:
255201
.catch(() => {
256202
console.error('Could not set blockers for tracking')
257203
})
258-
state = shieldsPanelState
259-
.updateTabShieldsData(state, tabId, { adsTrackers: action.setting })
260204
break
261205
}
262206
case shieldsPanelTypes.CONTROLS_TOGGLED:

app/components/braveShields/braveShields.tsx

+8-7
Original file line numberDiff line numberDiff line change
@@ -32,22 +32,23 @@ export default class BraveShields extends React.Component<Props, object> {
3232
return (
3333
<div data-test-id='brave-shields-panel'>
3434
<BraveShieldsHeader
35-
shieldsEnabled={shieldsPanelTabData.shieldsEnabled}
35+
braveShields={shieldsPanelTabData.braveShields}
3636
shieldsToggled={actions.shieldsToggled}
3737
hostname={shieldsPanelTabData.hostname}
3838
/>
3939
<BraveShieldsStats
40-
shieldsEnabled={shieldsPanelTabData.shieldsEnabled}
40+
braveShields={shieldsPanelTabData.braveShields}
4141
adsBlocked={shieldsPanelTabData.adsBlocked}
42-
trackingProtectionBlocked={shieldsPanelTabData.trackingProtectionBlocked}
43-
httpsEverywhereRedirected={shieldsPanelTabData.httpsEverywhereRedirected}
42+
trackersBlocked={shieldsPanelTabData.trackersBlocked}
43+
httpsRedirected={shieldsPanelTabData.httpsRedirected}
4444
javascriptBlocked={shieldsPanelTabData.javascriptBlocked}
4545
/>
4646
<BraveShieldsControls
47-
shieldsEnabled={shieldsPanelTabData.shieldsEnabled}
47+
braveShields={shieldsPanelTabData.braveShields}
4848
blockAdsTrackers={actions.blockAdsTrackers}
49-
adsTrackers={shieldsPanelTabData.adsTrackers}
50-
httpsEverywhere={shieldsPanelTabData.httpsEverywhere}
49+
ads={shieldsPanelTabData.ads}
50+
trackers={shieldsPanelTabData.trackers}
51+
httpUpgradableResources={shieldsPanelTabData.httpUpgradableResources}
5152
javascript={shieldsPanelTabData.javascript}
5253
controlsToggled={actions.controlsToggled}
5354
httpsEverywhereToggled={actions.httpsEverywhereToggled}

app/components/braveShields/braveShieldsControls.tsx

+14-13
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,10 @@ import { BlockOptions } from '../../types/other/blockTypes'
99

1010
export interface Props {
1111
controlsOpen: boolean
12-
adsTrackers: string
13-
shieldsEnabled: BlockOptions
14-
httpsEverywhere: BlockOptions
12+
braveShields: BlockOptions
13+
httpUpgradableResources: BlockOptions
14+
ads: BlockOptions
15+
trackers: BlockOptions
1516
javascript: BlockOptions
1617
blockAdsTrackers: shieldActions.BlockAdsTrackers
1718
controlsToggled: shieldActions.ControlsToggled
@@ -50,7 +51,7 @@ export default class BraveShieldsControls extends React.Component<Props, object>
5051
}
5152

5253
render () {
53-
const { shieldsEnabled, adsTrackers, controlsOpen, httpsEverywhere, javascript } = this.props
54+
const { braveShields, ads, trackers, controlsOpen, httpUpgradableResources, javascript } = this.props
5455
return (
5556
<Grid
5657
id='braveShieldsControls'
@@ -66,9 +67,9 @@ export default class BraveShieldsControls extends React.Component<Props, object>
6667
onClick={this.onToggleControls}
6768
>
6869
<BrowserSelect
69-
disabled={shieldsEnabled === 'block'}
70+
disabled={braveShields === 'block'}
7071
titleName='Ad Control'
71-
value={adsTrackers}
72+
value={braveShields !== 'block' && ads !== 'allow' && trackers !== 'allow' ? 'allow' : 'block'}
7273
onChange={this.onChangeAdControl}
7374
>
7475
{/* TODO needs "show brave ads" */}
@@ -77,7 +78,7 @@ export default class BraveShieldsControls extends React.Component<Props, object>
7778
</BrowserSelect>
7879
{/* TODO @cezaraugusto */}
7980
<BrowserSelect
80-
disabled={shieldsEnabled === 'block'}
81+
disabled={braveShields === 'block'}
8182
titleName='Cookie Control'
8283
value='someVALUE'
8384
onChange={this.onChangeCookieControl}
@@ -94,35 +95,35 @@ export default class BraveShieldsControls extends React.Component<Props, object>
9495
{/* TODO @cezaraugusto */}
9596
<SwitchButton
9697
id='httpsEverywhere'
97-
disabled={shieldsEnabled === 'block'}
98+
disabled={braveShields === 'block'}
9899
rightText='HTTPS Everywhere'
99-
checked={shieldsEnabled === 'allow' && httpsEverywhere === 'allow'}
100+
checked={braveShields !== 'block' && httpUpgradableResources !== 'allow'}
100101
onChange={this.onToggleHTTPSEverywhere}
101102
/>
102103
</Column>
103104
<Column>
104105
{/* TODO @cezaraugusto */}
105106
<SwitchButton
106107
id='blockScripts'
107-
disabled={shieldsEnabled === 'block'}
108+
disabled={braveShields === 'block'}
108109
rightText='Block Scripts'
109-
checked={shieldsEnabled === 'allow' && javascript === 'block'}
110+
checked={braveShields !== 'block' && javascript !== 'allow'}
110111
onChange={this.onToggleJavaScript}
111112
/>
112113
</Column>
113114
<Column>
114115
{/* TODO @cezaraugusto */}
115116
<SwitchButton
116117
id='fingerprintingProtection'
117-
disabled={shieldsEnabled === 'block'}
118+
disabled={braveShields === 'block'}
118119
rightText='Fingerprinting Protection'
119120
/>
120121
</Column>
121122
<Column>
122123
{/* TODO @cezaraugusto */}
123124
<SwitchButton
124125
id='blockPhishingMalware'
125-
disabled={shieldsEnabled === 'block'}
126+
disabled={braveShields === 'block'}
126127
rightText='Block Phishing/Malware'
127128
/>
128129
</Column>

0 commit comments

Comments
 (0)