1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Use of this source code is governed by a BSD-style license that can be 3bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// found in the LICENSE file. 4bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 5bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsencr.define('options', function() { 6bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 7bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen var OptionsPage = options.OptionsPage; 8ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen var Preferences = options.Preferences; 9bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 10bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ///////////////////////////////////////////////////////////////////////////// 11bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // ProxyOptions class: 12bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 13bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen /** 14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * Encapsulated handling of ChromeOS proxy options page. 15bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen * @constructor 16bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen */ 17bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen function ProxyOptions(model) { 18bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen OptionsPage.call(this, 'proxy', localStrings.getString('proxyPage'), 19bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 'proxyPage'); 20bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 21bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen cr.addSingletonGetter(ProxyOptions); 23ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen /** 25ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * UI pref change handler. 26ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen */ 27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen function handlePrefUpdate(e) { 28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ProxyOptions.getInstance().updateControls(); 29ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen /** 32ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * Monitor pref change of given element. 33ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen */ 34ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen function observePrefsUI(el) { 35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen Preferences.getInstance().addEventListener(el.pref, handlePrefUpdate); 36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 37bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 38bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ProxyOptions.prototype = { 39bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Inherit ProxyOptions from OptionsPage. 40bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen __proto__: OptionsPage.prototype, 41bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 42bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen /** 43bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen * Initializes ProxyOptions page. 44bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen */ 45bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen initializePage: function() { 46bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Call base class implementation to starts preference initialization. 47bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen OptionsPage.prototype.initializePage.call(this); 48bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 49bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Set up ignored page. 50bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen options.proxyexceptions.ProxyExceptions.decorate($('ignoredHostList')); 51bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 52bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen this.addEventListener('visibleChange', this.handleVisibleChange_); 53bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen $('removeHost').addEventListener('click', this.handleRemoveExceptions_); 54bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen $('addHost').addEventListener('click', this.handleAddException_); 55bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen $('directProxy').addEventListener('click', this.disableManual_); 56bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen $('manualProxy').addEventListener('click', this.enableManual_); 57bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen $('autoProxy').addEventListener('click', this.disableManual_); 58bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen $('proxyAllProtocols').addEventListener('click', this.toggleSingle_); 59ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 60ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen observePrefsUI($('directProxy')); 61ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen observePrefsUI($('manualProxy')); 62ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen observePrefsUI($('autoProxy')); 63ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen observePrefsUI($('proxyAllProtocols')); 64bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen }, 65bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 66bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen proxyListInitalized_: false, 67bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 68bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen /** 69ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * Update controls state. 70ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * @public 71bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen */ 72ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen updateControls: function() { 73bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen this.toggleSingle_(); 74bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if ($('manualProxy').checked) { 75bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen this.enableManual_(); 76bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } else { 77bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen this.disableManual_(); 78bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 79bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if (!this.proxyListInitalized_ && this.visible) { 80bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen this.proxyListInitalized_ = true; 81bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen $('ignoredHostList').redraw(); 82bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 83bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen }, 84bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 85bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen /** 86ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * Handler for OptionsPage's visible property change event. 87ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * @private 88ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * @param {Event} e Property change event. 89ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen */ 90ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen handleVisibleChange_: function(e) { 91ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.updateControls(); 92ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }, 93ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 94ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen /** 95bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen * Handler for when the user clicks on the checkbox to allow a 96bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen * single proxy usage. 97bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen * @private 98bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen * @param {Event} e Click Event. 99bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen */ 100bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen toggleSingle_: function(e) { 101bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen if($('proxyAllProtocols').value) { 102bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen $('multiProxy').style.display = 'none'; 103bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen $('singleProxy').style.display = 'block'; 104bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } else { 105bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen $('multiProxy').style.display = 'block'; 106bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen $('singleProxy').style.display = 'none'; 107bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 108bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen }, 109bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 110bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen /** 111bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen * Handler for selecting a radio button that will disable the manual 112bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen * controls. 113bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen * @private 114bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen * @param {Event} e Click event. 115bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen */ 116bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen disableManual_: function(e) { 117513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch $('proxyAllProtocols').disabled = true; 118bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen $('proxyHostName').disabled = true; 119bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen $('proxyHostPort').disabled = true; 120bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen $('proxyHostSingleName').disabled = true; 121bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen $('proxyHostSinglePort').disabled = true; 122bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen $('secureProxyHostName').disabled = true; 123bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen $('secureProxyPort').disabled = true; 124bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen $('ftpProxy').disabled = true; 125bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen $('ftpProxyPort').disabled = true; 126bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen $('socksHost').disabled = true; 127bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen $('socksPort').disabled = true; 128bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen $('newHost').disabled = true; 129bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen $('removeHost').disabled = true; 130bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen $('addHost').disabled = true; 131bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen $('advancedConfig').style.display = 'none'; 132bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen }, 133bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 134bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen /** 135bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen * Handler for selecting a radio button that will enable the manual 136bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen * controls. 137bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen * @private 138bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen * @param {Event} e Click event. 139bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen */ 140bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen enableManual_: function(e) { 141513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch $('proxyAllProtocols').disabled = false; 142bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen $('proxyHostName').disabled = false; 143bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen $('proxyHostPort').disabled = false; 144bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen $('proxyHostSingleName').disabled = false; 145bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen $('proxyHostSinglePort').disabled = false; 146bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen $('secureProxyHostName').disabled = false; 147bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen $('secureProxyPort').disabled = false; 148bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen $('ftpProxy').disabled = false; 149bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen $('ftpProxyPort').disabled = false; 150bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen $('socksHost').disabled = false; 151bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen $('socksPort').disabled = false; 152bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen $('newHost').disabled = false; 153bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen $('removeHost').disabled = false; 154bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen $('addHost').disabled = false; 155bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen $('advancedConfig').style.display = '-webkit-box'; 156ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen $('ignoredHostList').redraw(); 157bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen }, 158bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 159bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen /** 160bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen * Handler for "add" event fired from userNameEdit. 161bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen * @private 162bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen * @param {Event} e Add event fired from userNameEdit. 163bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen */ 164bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen handleAddException_: function(e) { 165bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen var exception = $('newHost').value; 166bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen $('newHost').value = ''; 167ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 168ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen exception = exception.trim(); 169ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (exception) 170ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen $('ignoredHostList').addException(exception); 171bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen }, 172bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 173bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen /** 174bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen * Handler for when the remove button is clicked 175bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen * @private 176bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen */ 177bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen handleRemoveExceptions_: function(e) { 178bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen var selectedItems = $('ignoredHostList').selectedItems; 179bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen for (var x = 0; x < selectedItems.length; x++) { 180bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen $('ignoredHostList').removeException(selectedItems[x]); 181bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 182bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 183bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen }; 184bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 185bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Export 186bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return { 187bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ProxyOptions: ProxyOptions 188bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen }; 189bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 190bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}); 191