/******************************************************************************* µMatrix - a Chromium browser extension to black/white list requests. Copyright (C) 2014 Raymond Hill This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see {http://www.gnu.org/licenses/}. Home: https://github.com/gorhill/uMatrix */ /* global vAPI, uDom */ /******************************************************************************/ (function() { 'use strict'; /******************************************************************************/ var messager = vAPI.messaging.channel('privacy.js'); var cachedPrivacySettings = {}; /******************************************************************************/ function changeUserSettings(name, value) { messager.send({ what: 'userSettings', name: name, value: value }); } /******************************************************************************/ function changeMatrixSwitch(name, state) { messager.send({ what: 'setMatrixSwitch', switchName: name, state: state }); } /******************************************************************************/ function onChangeValueHandler(uelem, setting, min, max) { var oldVal = cachedPrivacySettings.userSettings[setting]; var newVal = Math.round(parseFloat(uelem.val())); if ( typeof newVal !== 'number' ) { newVal = oldVal; } else { newVal = Math.max(newVal, min); newVal = Math.min(newVal, max); } uelem.val(newVal); if ( newVal !== oldVal ) { changeUserSettings(setting, newVal); } } /******************************************************************************/ function prepareToDie() { onChangeValueHandler(uDom('#delete-unused-session-cookies-after'), 'deleteUnusedSessionCookiesAfter', 15, 1440); onChangeValueHandler(uDom('#clear-browser-cache-after'), 'clearBrowserCacheAfter', 15, 1440); onChangeValueHandler(uDom('#spoof-user-agent-every'), 'spoofUserAgentEvery', 2, 999); } /******************************************************************************/ var installEventHandlers = function() { uDom('[data-setting-bool]').on('change', function(){ var settingName = this.getAttribute('data-setting-bool'); if ( typeof settingName === 'string' && settingName !== '' ) { changeUserSettings(settingName, this.checked); } }); uDom('[data-matrix-switch]').on('change', function(){ var switchName = this.getAttribute('data-matrix-switch'); if ( typeof switchName === 'string' && switchName !== '' ) { changeMatrixSwitch(switchName, this.checked); } }); uDom('#delete-unused-session-cookies-after').on('change', function(){ onChangeValueHandler(uDom(this), 'deleteUnusedSessionCookiesAfter', 15, 1440); }); uDom('#clear-browser-cache-after').on('change', function(){ onChangeValueHandler(uDom(this), 'clearBrowserCacheAfter', 15, 1440); }); uDom('#spoof-user-agent-every').on('change', function(){ onChangeValueHandler(uDom(this), 'spoofUserAgentEvery', 2, 999); }); uDom('#spoof-user-agent-with').on('change', function(){ changeUserSettings('spoofUserAgentWith', uDom(this).val()); }); // https://github.com/gorhill/httpswitchboard/issues/197 uDom(window).on('beforeunload', prepareToDie); }; /******************************************************************************/ uDom.onLoad(function() { var onSettingsReceived = function(privacySettings) { // Cache copy cachedPrivacySettings = privacySettings; var userSettings = privacySettings.userSettings; var matrixSwitches = privacySettings.matrixSwitches; uDom('[data-setting-bool]').forEach(function(elem){ var settingName = elem.attr('data-setting-bool'); if ( typeof settingName === 'string' && settingName !== '' ) { elem.prop('checked', userSettings[settingName] === true); } }); uDom('[data-matrix-switch]').forEach(function(elem){ var switchName = elem.attr('data-matrix-switch'); if ( typeof switchName === 'string' && switchName !== '' ) { elem.prop('checked', matrixSwitches[switchName] === true); } }); uDom('#delete-unused-session-cookies-after').val(userSettings.deleteUnusedSessionCookiesAfter); uDom('#clear-browser-cache-after').val(userSettings.clearBrowserCacheAfter); uDom('#spoof-user-agent-every').val(userSettings.spoofUserAgentEvery); uDom('#spoof-user-agent-with').val(userSettings.spoofUserAgentWith); installEventHandlers(); }; messager.send({ what: 'getPrivacySettings' }, onSettingsReceived); }); /******************************************************************************/ })();