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

Commit 661ef90

Browse files
authored
Merge pull request #10289 from brave/fix/9987
Fix isResourceEnabled jank using a cache
2 parents 0dfd283 + f0b7290 commit 661ef90

File tree

5 files changed

+78
-15
lines changed

5 files changed

+78
-15
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/* This Source Code Form is subject to the terms of the Mozilla Public
2+
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
3+
* You can obtain one at http://mozilla.org/MPL/2.0/. */
4+
5+
'use strict'
6+
7+
const appConstants = require('../../../js/constants/appConstants')
8+
const {clearBraverySettingsCache} = require('../../common/cache/braverySettingsCache')
9+
const {makeImmutable} = require('../../common/state/immutableUtil')
10+
11+
const braverySettingsReducer = (state, action, immutableAction) => {
12+
action = immutableAction || makeImmutable(action)
13+
switch (action.get('actionType')) {
14+
case appConstants.APP_SET_RESOURCE_ENABLED:
15+
case appConstants.APP_CHANGE_SITE_SETTING:
16+
case appConstants.APP_REMOVE_SITE_SETTING:
17+
case appConstants.APP_CLEAR_SITE_SETTINGS:
18+
clearBraverySettingsCache()
19+
break
20+
}
21+
return state
22+
}
23+
24+
module.exports = braverySettingsReducer
+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
/* This Source Code Form is subject to the terms of the Mozilla Public
2+
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
3+
* You can obtain one at http://mozilla.org/MPL/2.0/. */
4+
5+
/**
6+
* Cache of URLs mapped their site settings.
7+
* This gets rebuilt when site settings or a bravery setting is changed.
8+
*/
9+
const currentBraverySettingsCache = new Map()
10+
11+
const clearBraverySettingsCache = () => {
12+
currentBraverySettingsCache.clear()
13+
}
14+
15+
const getBraverySettingsCache = (url) => {
16+
return currentBraverySettingsCache.get(url)
17+
}
18+
19+
const updateBraverySettingsCache = (url, braverySettings) => {
20+
currentBraverySettingsCache.set(url, braverySettings)
21+
}
22+
23+
module.exports = {
24+
clearBraverySettingsCache,
25+
getBraverySettingsCache,
26+
updateBraverySettingsCache
27+
}

app/filtering.js

+22-11
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ const {fullscreenOption} = require('./common/constants/settingsEnums')
3535
const isThirdPartyHost = require('./browser/isThirdPartyHost')
3636
const extensionState = require('./common/state/extensionState')
3737
const {cookieExceptions, refererExceptions} = require('../js/data/siteHacks')
38+
const {getBraverySettingsCache, updateBraverySettingsCache} = require('./common/cache/braverySettingsCache')
3839

3940
let appStore = null
4041

@@ -58,6 +59,22 @@ const registeredSessions = {}
5859
*/
5960
const permissionCallbacks = {}
6061

62+
const getBraverySettingsForUrl = (url, appState, isPrivate) => {
63+
const cachedBraverySettings = getBraverySettingsCache(url)
64+
if (cachedBraverySettings) {
65+
return cachedBraverySettings
66+
}
67+
const savedSettings = siteSettings.getSiteSettingsForURL(appState.get('siteSettings'), url)
68+
const tempSettings = siteSettings.getSiteSettingsForURL(appState.get('temporarySiteSettings'), url)
69+
70+
let braverySettings = siteSettings.activeSettings(savedSettings, appState, appConfig)
71+
if (isPrivate && tempSettings) {
72+
braverySettings = siteSettings.activeSettings(tempSettings, appState, appConfig)
73+
}
74+
updateBraverySettingsCache(url, braverySettings)
75+
return braverySettings
76+
}
77+
6178
module.exports.registerBeforeSendHeadersFilteringCB = (filteringFn) => {
6279
beforeSendHeadersFilteringFns.push(filteringFn)
6380
}
@@ -731,28 +748,22 @@ module.exports.isResourceEnabled = (resourceName, url, isPrivate) => {
731748
if (resourceName === 'flash') {
732749
return true
733750
}
751+
const appState = appStore.getState()
752+
const settingsState = appState.get('settings')
734753

735754
if (resourceName === 'pdfjs') {
736-
return getSetting(settings.PDFJS_ENABLED)
755+
return getSetting(settings.PDFJS_ENABLED, settingsState)
737756
}
738757
if (resourceName === 'webtorrent') {
739-
return getSetting(settings.TORRENT_VIEWER_ENABLED)
758+
return getSetting(settings.TORRENT_VIEWER_ENABLED, settingsState)
740759
}
741760

742-
const appState = appStore.getState()
743-
744761
if (resourceName === 'webtorrent') {
745762
const extension = extensionState.getExtensionById(appState, config.torrentExtensionId)
746763
return extension !== undefined ? extension.get('enabled') : false
747764
}
748765

749-
const savedSettings = siteSettings.getSiteSettingsForURL(appState.get('siteSettings'), url)
750-
const tempSettings = siteSettings.getSiteSettingsForURL(appState.get('temporarySiteSettings'), url)
751-
752-
let braverySettings = siteSettings.activeSettings(savedSettings, appState, appConfig)
753-
if (isPrivate && tempSettings) {
754-
braverySettings = siteSettings.activeSettings(tempSettings, appState, appConfig)
755-
}
766+
const braverySettings = getBraverySettingsForUrl(url, appState, isPrivate)
756767

757768
// If full shields are down never enable extra protection
758769
if (braverySettings.shieldsUp === false) {

js/settings.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -50,17 +50,17 @@ const getDefaultSetting = (settingKey, settingsCollection) => {
5050
}
5151

5252
const resolveValue = (settingKey, settingsCollection) => {
53-
const appStore = (process.type === 'browser'
54-
? require('./stores/appStore').getState()
55-
: require('./stores/appStoreRenderer').state) || Immutable.Map()
56-
const appSettings = appStore.get('settings') || Immutable.Map()
5753
if (settingsCollection && settingsCollection.constructor === Immutable.Map &&
5854
settingsCollection.get(settingKey) !== undefined) {
5955
return settingsCollection.get(settingKey)
6056
}
6157
if (settingsCollection && settingsCollection[settingKey] !== undefined) {
6258
return settingsCollection[settingKey]
6359
}
60+
const appStore = (process.type === 'browser'
61+
? require('./stores/appStore').getState()
62+
: require('./stores/appStoreRenderer').state) || Immutable.Map()
63+
const appSettings = appStore.get('settings') || Immutable.Map()
6464
return appSettings.get(settingKey) !== undefined ? appSettings.get(settingKey) : appConfig.defaultSettings[settingKey]
6565
}
6666

js/stores/appStore.js

+1
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,7 @@ const handleAppAction = (action) => {
176176
require('../../app/browser/reducers/shareReducer'),
177177
require('../../app/browser/reducers/updatesReducer'),
178178
require('../../app/browser/reducers/topSitesReducer'),
179+
require('../../app/browser/reducers/braverySettingsReducer'),
179180
require('../../app/ledger').doAction,
180181
require('../../app/browser/menu')
181182
]

0 commit comments

Comments
 (0)