diff --git a/app/browser/reducers/autoplayReducer.js b/app/browser/reducers/autoplayReducer.js index 0cdfd8092a..8cc7e255a1 100644 --- a/app/browser/reducers/autoplayReducer.js +++ b/app/browser/reducers/autoplayReducer.js @@ -9,11 +9,13 @@ const {makeImmutable} = require('../../common/state/immutableUtil') const {ipcMain, webContents} = require('electron') const AppStore = require('../../../js/stores/appStore') const siteSettings = require('../../../js/state/siteSettings') +const settings = require('../../../js/constants/settings') const appActions = require('../../../js/actions/appActions') const {getOrigin} = require('../../../js/state/siteUtil') const locale = require('../../locale') const messages = require('../../../js/constants/messages') -const urlParse = require('../../common/urlParse') +const getSetting = require('../../../js/settings').getSetting +const {autoplayOption} = require('../../common/constants/settingsEnums') const showAutoplayMessageBox = (tabId) => { const tab = webContents.fromTabID(tabId) @@ -22,8 +24,12 @@ const showAutoplayMessageBox = (tabId) => { } const location = tab.getURL() const origin = getOrigin(location) + if (getSetting(settings.AUTOPLAY_MEDIA) === autoplayOption.ALWAYS_ALLOW) { + appActions.changeSiteSetting(origin, 'autoplay', true) + return + } const originSettings = siteSettings.getSiteSettingsForURL(AppStore.getState().get('siteSettings'), origin) - if (originSettings && originSettings.get('noAutoplay') === true) { + if (originSettings && originSettings.get('autoplay') === false) { return } const message = locale.translation('allowAutoplay', {origin}) @@ -43,20 +49,20 @@ const showAutoplayMessageBox = (tabId) => { ipcMain.once(messages.NOTIFICATION_RESPONSE, (e, msg, buttonIndex, persist) => { if (msg === message) { appActions.hideNotification(message) - let ruleKey = origin - const parsedUrl = urlParse(location) - if ((parsedUrl.protocol === 'https:' || parsedUrl.protocol === 'http:')) { - ruleKey = `https?://${parsedUrl.host}` - } if (buttonIndex === 0) { - appActions.changeSiteSetting(ruleKey, 'noAutoplay', false) - + appActions.changeSiteSetting(origin, 'autoplay', true) if (tab && !tab.isDestroyed()) { tab.reload() + tab.on('destroyed', function temporaryAllow (e) { + if (!persist) { + appActions.removeSiteSetting(origin, 'autoplay') + // tab.removeListener('did-finish-load', temporaryAllow) + } + }) } } else { if (persist) { - appActions.changeSiteSetting(ruleKey, 'noAutoplay', true) + appActions.changeSiteSetting(origin, 'autoplay', false) } } } diff --git a/app/common/constants/settingsEnums.js b/app/common/constants/settingsEnums.js index 0b089d0719..0b6dcc6196 100644 --- a/app/common/constants/settingsEnums.js +++ b/app/common/constants/settingsEnums.js @@ -32,10 +32,16 @@ const fullscreenOption = { ALWAYS_ALLOW: 'alwaysAllow' } +const autoplayOption = { + ALWAYS_ASK: 'alwaysAsk', + ALWAYS_ALLOW: 'alwaysAllow' +} + module.exports = { startsWithOption, newTabMode, bookmarksToolbarMode, tabCloseAction, - fullscreenOption + fullscreenOption, + autoplayOption } diff --git a/app/extensions/brave/locales/en-US/bravery.properties b/app/extensions/brave/locales/en-US/bravery.properties index b95e1a314f..dbccbe3592 100644 --- a/app/extensions/brave/locales/en-US/bravery.properties +++ b/app/extensions/brave/locales/en-US/bravery.properties @@ -26,4 +26,3 @@ httpReroutes={[plural(httpsUpgradeCount)]} httpReroutes[one]=HTTPS Upgrade httpReroutes[other]=HTTPS Upgrades editBraveryGlobalSettings=Edit default shield settings… -noAutoplay=Block Autoplay diff --git a/app/extensions/brave/locales/en-US/preferences.properties b/app/extensions/brave/locales/en-US/preferences.properties index f0bb77d801..3a553988a4 100644 --- a/app/extensions/brave/locales/en-US/preferences.properties +++ b/app/extensions/brave/locales/en-US/preferences.properties @@ -367,3 +367,4 @@ scaleSizeSmaller=Smaller scaleSizeNormal=Normal scaleSizeLarger=Larger scaleSizeSuper=Supersize +autoplay=Autoplay Media diff --git a/app/filtering.js b/app/filtering.js index d89e839f85..4d7ca56c26 100644 --- a/app/filtering.js +++ b/app/filtering.js @@ -455,6 +455,7 @@ function registerPermissionHandler (session, partition) { appActions.hideNotification(message) const result = !!(buttonIndex) cb(result) + console.log(result) if (persist) { // remember site setting for this host appActions.changeSiteSetting(origin, permission + 'Permission', result, isPrivate) diff --git a/app/locale.js b/app/locale.js index eaa5766bd1..698ef41549 100644 --- a/app/locale.js +++ b/app/locale.js @@ -252,7 +252,8 @@ var rendererIdentifiers = function () { 'importSuccessOk', 'connectionError', 'unknownError', - 'allowAutoplay' + 'allowAutoplay', + 'autoplayMedia' ] } diff --git a/app/sessionStore.js b/app/sessionStore.js index c17e3cdcea..56d8dab781 100644 --- a/app/sessionStore.js +++ b/app/sessionStore.js @@ -23,6 +23,7 @@ const downloadStates = require('../js/constants/downloadStates') const {tabFromFrame} = require('../js/state/frameStateUtil') const siteUtil = require('../js/state/siteUtil') const { topSites, pinnedTopSites } = require('../js/data/newTabData') +const { defaultSiteSettingsList } = require('../js/data/siteSettingsList') const sessionStorageVersion = 1 const filtering = require('./filtering') const autofill = require('./autofill') @@ -507,6 +508,25 @@ module.exports.runPostMigrations = (data) => { return data } +module.exports.runImportDefaultSettings = (data) => { + // import default site settings list + if (!data.defaultSiteSettingsListImported) { + for (var i = 0; i < defaultSiteSettingsList.length; ++i) { + let setting = defaultSiteSettingsList[i] + if (!data.siteSettings[setting.pattern]) { + data.siteSettings[setting.pattern] = {} + } + let targetSetting = data.siteSettings[setting.pattern] + if (!targetSetting.hasOwnProperty[setting.name]) { + targetSetting[setting.name] = setting.value + } + } + data.defaultSiteSettingsListImported = true + } + + return data +} + /** * Loads the browser state from storage. * @@ -532,6 +552,7 @@ module.exports.loadAppState = () => { console.log('could not parse data: ', data, e) } data = exports.defaultAppState() + data = module.exports.runImportDefaultSettings(data) } if (loaded) { @@ -561,6 +582,7 @@ module.exports.loadAppState = () => { } data = module.exports.runPostMigrations(data) + data = module.exports.runImportDefaultSettings(data) } data = setVersionInformation(data) diff --git a/docs/state.md b/docs/state.md index 9a69bacb0c..847fcceac2 100644 --- a/docs/state.md +++ b/docs/state.md @@ -266,9 +266,11 @@ AppStore savePasswords: boolean, // only false or undefined/null shieldsUp: boolean, widevine: (number|boolean), // false = block widevine, 0 = allow once, 1 = allow always - zoomLevel: number + zoomLevel: number, + autoplay: boolean, } }, + defaultSiteSettingsListImported: boolean, sync: { lastFetchTimestamp: integer // the last time new sync records were fetched in seconds deviceId: Array., diff --git a/js/about/preferences.js b/js/about/preferences.js index 1463f0ea2a..16df1b08b6 100644 --- a/js/about/preferences.js +++ b/js/about/preferences.js @@ -34,7 +34,7 @@ const messages = require('../constants/messages') const settings = require('../constants/settings') const {changeSetting} = require('../../app/renderer/lib/settingsUtil') const {passwordManagers, extensionIds} = require('../constants/passwordManagers') -const {startsWithOption, newTabMode, bookmarksToolbarMode, tabCloseAction, fullscreenOption} = require('../../app/common/constants/settingsEnums') +const {startsWithOption, newTabMode, bookmarksToolbarMode, tabCloseAction, fullscreenOption, autoplayOption} = require('../../app/common/constants/settingsEnums') const aboutActions = require('./aboutActions') const appActions = require('../actions/appActions') @@ -49,7 +49,6 @@ const adInsertion = appConfig.resourceNames.AD_INSERTION const trackingProtection = appConfig.resourceNames.TRACKING_PROTECTION const httpsEverywhere = appConfig.resourceNames.HTTPS_EVERYWHERE const safeBrowsing = appConfig.resourceNames.SAFE_BROWSING -const noAutoplay = appConfig.resourceNames.NOAUTOPLAY const noScript = appConfig.resourceNames.NOSCRIPT const flash = appConfig.resourceNames.FLASH @@ -77,7 +76,8 @@ const permissionNames = { 'openExternalPermission': ['boolean'], 'protocolRegistrationPermission': ['boolean'], 'flash': ['boolean', 'number'], - 'widevine': ['boolean', 'number'] + 'widevine': ['boolean', 'number'], + 'autoplay': ['boolean'] } const braveryPermissionNames = { @@ -88,8 +88,7 @@ const braveryPermissionNames = { 'safeBrowsing': ['boolean'], 'httpsEverywhere': ['boolean'], 'fingerprintingProtection': ['boolean'], - 'noScript': ['boolean', 'number'], - 'noAutoplay': ['boolean'] + 'noScript': ['boolean', 'number'] } class GeneralTab extends ImmutableComponent { @@ -498,7 +497,6 @@ class ShieldsTab extends ImmutableComponent { this.onChangeAdControl = this.onChangeAdControl.bind(this) this.onToggleHTTPSE = this.onToggleSetting.bind(this, httpsEverywhere) this.onToggleSafeBrowsing = this.onToggleSetting.bind(this, safeBrowsing) - this.onToggleNoAutoplay = this.onToggleSetting.bind(this, noAutoplay) this.onToggleNoScript = this.onToggleSetting.bind(this, noScript) } onChangeAdControl (e) { @@ -549,7 +547,6 @@ class ShieldsTab extends ImmutableComponent { -