personal_options.js revision 731df977c0511bca2206b5f333555b1205ff1f43
1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2010 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
53345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickcr.define('options', function() {
63345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  var OptionsPage = options.OptionsPage;
83345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
9731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // State variables.
10731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  var syncEnabled = false;
11731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  var syncSetupCompleted = false;
12731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
133345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  //
143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // PersonalOptions class
153345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // Encapsulated handling of personal options page.
163345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  //
173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  function PersonalOptions() {
183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    OptionsPage.call(this, 'personal', templateData.personalPage,
193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                     'personalPage');
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  cr.addSingletonGetter(PersonalOptions);
233345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
243345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  PersonalOptions.prototype = {
253345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    // Inherit PersonalOptions from OptionsPage.
263345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    __proto__: options.OptionsPage.prototype,
273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    // Initialize PersonalOptions page.
293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    initializePage: function() {
303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      // Call base class implementation to starts preference initialization.
313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      OptionsPage.prototype.initializePage.call(this);
323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
33731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      var self = this;
34731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      $('customize-sync').onclick = function(event) {
353345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick        OptionsPage.showPageByName('sync');
363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      };
37731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      $('start-stop-sync').onclick = function(event) {
38731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        if (self.syncSetupCompleted)
39731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          self.showStopSyncingOverlay_();
40731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        else
41731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          self.showSyncLoginDialog_();
42731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      };
43731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      $('privacy-dashboard-link').onclick = function(event) {
44731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        chrome.send('openPrivacyDashboardTabAndActivate');
453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      };
463345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      $('showpasswords').onclick = function(event) {
483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick        PasswordsExceptions.load();
493345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick        OptionsPage.showPageByName('passwordsExceptions');
503345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick        OptionsPage.showTab($('passwords-nav-tab'));
513345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick        chrome.send('coreOptionsUserMetricsAction',
523345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick            ['Options_ShowPasswordsExceptions']);
533345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      };
543345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      $('autofill_options').onclick = function(event) {
563345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick        OptionsPage.showPageByName('autoFillOptions');
573345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick        chrome.send('coreOptionsUserMetricsAction',
583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick            ['Options_ShowAutoFillSettings']);
593345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      };
603345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
613345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      if (!cr.isChromeOS) {
623345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick        $('import_data').onclick = function(event) {
633345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick          OptionsPage.showOverlay('importDataOverlay');
643345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick          chrome.send('coreOptionsUserMetricsAction', ['Import_ShowDlg']);
653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick        };
663345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      }
673345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
683345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      if (!cr.isChromeOS && navigator.platform.match(/linux|BSD/i)) {
693345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick        $('themes_GTK_button').onclick = function(event) {
703345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick          chrome.send('themesSetGTK');
713345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick        };
723345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
733345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick        $('themes_set_classic').onclick = function(event) {
743345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick          chrome.send('themesReset');
753345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick        };
763345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick        $('themes-gallery').onclick = function(event) {
773345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick          chrome.send('themesGallery');
783345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick        }
793345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      }
803345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
813345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      if (cr.isMac || cr.isWindows || cr.isChromeOS) {
823345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick        $('themes_reset').onclick = function(event) {
833345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick          chrome.send('themesReset');
843345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick        };
853345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick        $('themes-gallery').onclick = function(event) {
863345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick          chrome.send('themesGallery');
873345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick        }
883345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      }
89731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
90731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      if (cr.isChromeOS) {
91731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        chrome.send('loadAccountPicture');
92731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      }
933345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    },
943345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
95731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    showStopSyncingOverlay_: function(event) {
96731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      AlertOverlay.show(
97731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          localStrings.getString('stop_syncing_title'),
98731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          localStrings.getString('stop_syncing_explanation'),
99731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          localStrings.getString('stop_syncing_confirm_button_label'),
100731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          undefined,
101731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          function() { chrome.send('stopSyncing'); });
102731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    },
103731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
104731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    showSyncLoginDialog_: function(event) {
105731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      chrome.send('showSyncLoginDialog');
106731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    },
107731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
108731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    setElementVisible_: function(element, visible) {
109731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      element.style.display = visible ? 'inline' : 'none';
110731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    },
111731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
112731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    setElementClassSyncError_: function(element, visible) {
113731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      visible ? element.classList.add('sync-error') :
114731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick                element.classList.remove('sync-error');
115731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    },
116731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
117731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    setSyncEnabled_: function(enabled) {
118731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      this.syncEnabled = enabled;
119731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    },
120731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
121731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    setSyncSetupCompleted_: function(completed) {
122731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      this.syncSetupCompleted = completed;
123731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    },
124731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
125731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    setAccountPicture_: function(image) {
126731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      $('account-picture').src = image;
127731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    },
128731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
129731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    setSyncStatus_: function(status) {
130731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      $('sync-status').textContent = status;
131731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    },
132731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
133731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    setSyncStatusErrorVisible_: function(visible) {
134731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      this.setElementClassSyncError_($('sync-status'), visible);
135731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    },
136731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
137731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    setSyncActionLinkErrorVisible_: function(visible) {
138731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      this.setElementClassSyncError_($('sync-action-link'), visible);
139731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    },
140731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
141731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    setSyncActionLinkEnabled_: function(enabled) {
142731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      $('sync-action-link').disabled = !enabled;
143731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    },
144731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
145731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    setSyncActionLinkLabel_: function(status) {
146731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      $('sync-action-link').textContent = status;
147731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
148731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      // link-button does is not zero-area when the contents of the button are
149731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      // empty, so explicitly hide the element.
150731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      this.setElementVisible_($('sync-action-link'), status.length != 0);
151731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    },
152731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
153731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    setStartStopButtonVisible_: function(visible) {
154731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      this.setElementVisible_($('start-stop-sync'), visible);
155731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    },
156731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
157731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    setStartStopButtonEnabled_: function(enabled) {
158731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      $('start-stop-sync').disabled = !enabled;
159731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    },
160731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
161731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    setStartStopButtonLabel_: function(label) {
162731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      $('start-stop-sync').textContent = label;
163731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    },
164731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
165731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    setCustomizeButtonVisible_: function(visible) {
166731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      this.setElementVisible_($('customize-sync'), visible);
167731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    },
168731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
169731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    setCustomizeButtonEnabled_: function(enabled) {
170731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      $('customize-sync').disabled = !enabled;
171731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    },
172731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
173731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    setCustomizeButtonLabel_: function(label) {
174731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      $('customize-sync').textContent = label;
1753345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    },
1763345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
1773345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    setGtkThemeButtonEnabled_: function(enabled) {
1783345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      if (!cr.isChromeOS && navigator.platform.match(/linux|BSD/i)) {
1793345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick        $('themes_GTK_button').disabled = !enabled;
1803345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      }
1813345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    },
1823345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
1833345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    setClassicThemeButtonEnabled_: function(enabled) {
184731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      if (!cr.isChromeOS && navigator.platform.match(/linux|BSD/i)) {
185731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        $('themes_set_classic').disabled = !enabled;
186731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      }
1873345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    },
1883345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  };
1893345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
190731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // Forward public APIs to private implementations.
191731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  [
192731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    'setSyncEnabled',
193731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    'setSyncSetupCompleted',
194731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    'setAccountPicture',
195731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    'setSyncStatus',
196731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    'setSyncStatusErrorVisible',
197731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    'setSyncActionLinkErrorVisible',
198731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    'setSyncActionLinkEnabled',
199731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    'setSyncActionLinkLabel',
200731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    'setStartStopButtonVisible',
201731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    'setStartStopButtonEnabled',
202731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    'setStartStopButtonLabel',
203731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    'setCustomizeButtonVisible',
204731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    'setCustomizeButtonEnabled',
205731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    'setCustomizeButtonLabel',
206731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    'setGtkThemeButtonEnabled',
207731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    'setClassicThemeButtonEnabled',
208731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ].forEach(function(name) {
209731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    PersonalOptions[name] = function(value) {
210731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      PersonalOptions.getInstance()[name + '_'](value);
211731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    };
212731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  });
2133345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
2143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // Export
2153345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  return {
2163345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    PersonalOptions: PersonalOptions
2173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  };
2183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
2193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick});
220