diff --git a/app/common/state/extensionState.js b/app/common/state/extensionState.js index 68cfa50022b..aec1965e656 100644 --- a/app/common/state/extensionState.js +++ b/app/common/state/extensionState.js @@ -2,9 +2,16 @@ * 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/. */ -const { makeImmutable } = require('./immutableUtil') const Immutable = require('immutable') + +// Constants +const config = require('../../../js/constants/config') +const settings = require('../../../js/constants/settings') + +// Utils +const { makeImmutable } = require('./immutableUtil') const platformUtil = require('../lib/platformUtil') +const getSetting = require('../../../js/settings').getSetting const {chromeUrl} = require('../../../js/lib/appUrlUtil') const browserActionDefaults = Immutable.fromJS({ @@ -205,6 +212,18 @@ const extensionState = { }) }) return allProperties + }, + + isWebTorrentEnabled: (state) => { + if (state == null) { + return false + } + + const settingsState = state.get('settings') + const extension = extensionState.getExtensionById(state, config.torrentExtensionId) + const extensionEnabled = extension != null ? extension.get('enabled') : false + const torrentEnabled = getSetting(settings.TORRENT_VIEWER_ENABLED, settingsState) + return extensionEnabled && torrentEnabled } } diff --git a/app/filtering.js b/app/filtering.js index 4ba993995a4..66a31a8a361 100644 --- a/app/filtering.js +++ b/app/filtering.js @@ -783,10 +783,7 @@ module.exports.isResourceEnabled = (resourceName, url, isPrivate) => { } if (resourceName === 'webtorrent') { - const extension = extensionState.getExtensionById(appState, config.torrentExtensionId) - const torrentEnabled = getSetting(settings.TORRENT_VIEWER_ENABLED, settingsState) - const extensionEnabled = extension !== undefined ? extension.get('enabled') : false - return extensionEnabled && torrentEnabled + return extensionState.isWebTorrentEnabled(appState) } if (resourceName === 'ledger') { diff --git a/js/stores/appStore.js b/js/stores/appStore.js index ac582ba24ea..3104175102a 100644 --- a/js/stores/appStore.js +++ b/js/stores/appStore.js @@ -271,7 +271,9 @@ const handleAppAction = (action) => { // TODO(bridiver) - these should be refactored into reducers appState = filtering.init(appState, action, appStore) appState = basicAuth.init(appState, action, appStore) - appState = webtorrent.init(appState, action, appStore) + if (extensionState.isWebTorrentEnabled(appState)) { + appState = webtorrent.init(appState, action, appStore) + } appState = profiles.init(appState, action, appStore) appState = require('../../app/sync').init(appState, action, appStore) calculateTopSites(true, true) diff --git a/test/unit/app/common/state/extensionStateTest.js b/test/unit/app/common/state/extensionStateTest.js index 15195749e54..5d9b1545515 100644 --- a/test/unit/app/common/state/extensionStateTest.js +++ b/test/unit/app/common/state/extensionStateTest.js @@ -1,5 +1,7 @@ /* global describe, it, before */ const extensionState = require('../../../../../app/common/state/extensionState') +const config = require('../../../../../js/constants/config') +const settings = require('../../../../../js/constants/settings') const Immutable = require('immutable') const assert = require('assert') @@ -682,4 +684,48 @@ describe('extensionState', function () { commonTests() }) }) + + describe('isWebTorrentEnabled', function () { + const torrentId = config.torrentExtensionId + + it('null case', function () { + const result = extensionState.isWebTorrentEnabled() + assert.equal(result, false) + }) + + it('empty state', function () { + const result = extensionState.isWebTorrentEnabled(defaultAppState) + assert.equal(result, false) + }) + + it('extension is disabled', function () { + const state = defaultAppState + .setIn(['extensions', torrentId], Immutable.fromJS({ + enabled: false + })) + .setIn(['settings', settings.TORRENT_VIEWER_ENABLED], true) + const result = extensionState.isWebTorrentEnabled(state) + assert.equal(result, false) + }) + + it('torrent is disabled', function () { + const state = defaultAppState + .setIn(['extensions', torrentId], Immutable.fromJS({ + enabled: true + })) + .setIn(['settings', settings.TORRENT_VIEWER_ENABLED], false) + const result = extensionState.isWebTorrentEnabled(state) + assert.equal(result, false) + }) + + it('everything is enabled', function () { + const state = defaultAppState + .setIn(['extensions', torrentId], Immutable.fromJS({ + enabled: true + })) + .setIn(['settings', settings.TORRENT_VIEWER_ENABLED], true) + const result = extensionState.isWebTorrentEnabled(state) + assert.equal(result, true) + }) + }) })