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