• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5var AddLanguageOverlay = options.AddLanguageOverlay;
6var AlertOverlay = options.AlertOverlay;
7var AutofillEditAddressOverlay = options.AutofillEditAddressOverlay;
8var AutofillEditCreditCardOverlay = options.AutofillEditCreditCardOverlay;
9var AutofillOptions = options.AutofillOptions;
10var BrowserOptions = options.BrowserOptions;
11var ClearBrowserDataOverlay = options.ClearBrowserDataOverlay;
12var ConfirmDialog = options.ConfirmDialog;
13var ContentSettingsExceptionsArea =
14    options.contentSettings.ContentSettingsExceptionsArea;
15var ContentSettings = options.ContentSettings;
16var CookiesView = options.CookiesView;
17var CreateProfileOverlay = options.CreateProfileOverlay;
18var EditDictionaryOverlay = cr.IsMac ? null : options.EditDictionaryOverlay;
19var FactoryResetOverlay = options.FactoryResetOverlay;
20<if expr="pp_ifdef('enable_google_now')">
21var GeolocationOptions = options.GeolocationOptions;
22</if>
23var FontSettings = options.FontSettings;
24var HandlerOptions = options.HandlerOptions;
25var HomePageOverlay = options.HomePageOverlay;
26var ImportDataOverlay = options.ImportDataOverlay;
27var LanguageOptions = options.LanguageOptions;
28var ManageProfileOverlay = options.ManageProfileOverlay;
29var ManagedUserCreateConfirmOverlay = options.ManagedUserCreateConfirmOverlay;
30var ManagedUserImportOverlay = options.ManagedUserImportOverlay;
31var ManagedUserLearnMoreOverlay = options.ManagedUserLearnMoreOverlay;
32var MediaGalleriesManager = options.MediaGalleriesManager;
33var OptionsFocusManager = options.OptionsFocusManager;
34var OptionsPage = options.OptionsPage;
35var PasswordManager = options.PasswordManager;
36var Preferences = options.Preferences;
37var PreferredNetworks = options.PreferredNetworks;
38var ResetProfileSettingsBanner = options.ResetProfileSettingsBanner;
39var ResetProfileSettingsOverlay = options.ResetProfileSettingsOverlay;
40var SearchEngineManager = options.SearchEngineManager;
41var SearchPage = options.SearchPage;
42var StartupOverlay = options.StartupOverlay;
43var SyncSetupOverlay = options.SyncSetupOverlay;
44
45/**
46 * DOMContentLoaded handler, sets up the page.
47 */
48function load() {
49  // Decorate the existing elements in the document.
50  cr.ui.decorate('input[pref][type=checkbox]', options.PrefCheckbox);
51  cr.ui.decorate('input[pref][type=number]', options.PrefNumber);
52  cr.ui.decorate('input[pref][type=radio]', options.PrefRadio);
53  cr.ui.decorate('input[pref][type=range]', options.PrefRange);
54  cr.ui.decorate('select[pref]', options.PrefSelect);
55  cr.ui.decorate('input[pref][type=text]', options.PrefTextField);
56  cr.ui.decorate('input[pref][type=url]', options.PrefTextField);
57  cr.ui.decorate('button[pref]', options.PrefButton);
58  cr.ui.decorate('#content-settings-page input[type=radio]:not(.handler-radio)',
59      options.ContentSettingsRadio);
60  cr.ui.decorate('#content-settings-page input[type=radio].handler-radio',
61      options.HandlersEnabledRadio);
62  cr.ui.decorate('span.controlled-setting-indicator',
63      options.ControlledSettingIndicator);
64
65  // Top level pages.
66  OptionsPage.register(SearchPage.getInstance());
67  OptionsPage.register(BrowserOptions.getInstance());
68
69  // Overlays.
70  OptionsPage.registerOverlay(AddLanguageOverlay.getInstance(),
71                              LanguageOptions.getInstance());
72  OptionsPage.registerOverlay(AlertOverlay.getInstance());
73  OptionsPage.registerOverlay(AutofillEditAddressOverlay.getInstance(),
74                              AutofillOptions.getInstance());
75  OptionsPage.registerOverlay(AutofillEditCreditCardOverlay.getInstance(),
76                              AutofillOptions.getInstance());
77  OptionsPage.registerOverlay(AutofillOptions.getInstance(),
78                              BrowserOptions.getInstance(),
79                              [$('autofill-settings')]);
80  OptionsPage.registerOverlay(ClearBrowserDataOverlay.getInstance(),
81                              BrowserOptions.getInstance(),
82                              [$('privacyClearDataButton')]);
83  OptionsPage.registerOverlay(
84      new ConfirmDialog(
85          'doNotTrackConfirm',
86          loadTimeData.getString('doNotTrackConfirmOverlayTabTitle'),
87          'do-not-track-confirm-overlay',
88          $('do-not-track-confirm-ok'),
89          $('do-not-track-confirm-cancel'),
90          $('do-not-track-enabled').pref,
91          $('do-not-track-enabled').metric),
92      BrowserOptions.getInstance());
93  // 'spelling-enabled-control' element is only present on Chrome branded
94  // builds.
95  if ($('spelling-enabled-control')) {
96    OptionsPage.registerOverlay(
97        new ConfirmDialog(
98            'spellingConfirm',
99            loadTimeData.getString('spellingConfirmOverlayTabTitle'),
100            'spelling-confirm-overlay',
101            $('spelling-confirm-ok'),
102            $('spelling-confirm-cancel'),
103            $('spelling-enabled-control').pref,
104            $('spelling-enabled-control').metric),
105        BrowserOptions.getInstance());
106  }
107  OptionsPage.registerOverlay(ContentSettings.getInstance(),
108                              BrowserOptions.getInstance(),
109                              [$('privacyContentSettingsButton')]);
110  OptionsPage.registerOverlay(ContentSettingsExceptionsArea.getInstance(),
111                              ContentSettings.getInstance());
112  OptionsPage.registerOverlay(CookiesView.getInstance(),
113                              ContentSettings.getInstance(),
114                              [$('privacyContentSettingsButton'),
115                               $('show-cookies-button')]);
116  OptionsPage.registerOverlay(CreateProfileOverlay.getInstance(),
117                              BrowserOptions.getInstance());
118  if (!cr.isMac) {
119    OptionsPage.registerOverlay(EditDictionaryOverlay.getInstance(),
120                                LanguageOptions.getInstance(),
121                                [$('edit-dictionary-button')]);
122  }
123  OptionsPage.registerOverlay(FontSettings.getInstance(),
124                              BrowserOptions.getInstance(),
125                              [$('fontSettingsCustomizeFontsButton')]);
126  if (HandlerOptions && $('manage-handlers-button')) {
127    OptionsPage.registerOverlay(HandlerOptions.getInstance(),
128                                ContentSettings.getInstance(),
129                                [$('manage-handlers-button')]);
130  }
131  OptionsPage.registerOverlay(HomePageOverlay.getInstance(),
132                              BrowserOptions.getInstance(),
133                              [$('change-home-page')]);
134  OptionsPage.registerOverlay(ImportDataOverlay.getInstance(),
135                              BrowserOptions.getInstance());
136  OptionsPage.registerOverlay(LanguageOptions.getInstance(),
137                              BrowserOptions.getInstance(),
138                              [$('language-button'),
139                               $('manage-languages')]);
140  OptionsPage.registerOverlay(ManageProfileOverlay.getInstance(),
141                              BrowserOptions.getInstance());
142  if (!cr.isChromeOS) {
143    OptionsPage.registerOverlay(ManagedUserCreateConfirmOverlay.getInstance(),
144                                BrowserOptions.getInstance());
145    if (loadTimeData.getBoolean('allowCreateExistingManagedUsers')) {
146      OptionsPage.registerOverlay(ManagedUserImportOverlay.getInstance(),
147                                  BrowserOptions.getInstance());
148    }
149    OptionsPage.registerOverlay(ManagedUserLearnMoreOverlay.getInstance(),
150                                CreateProfileOverlay.getInstance());
151  }
152  OptionsPage.registerOverlay(MediaGalleriesManager.getInstance(),
153                              ContentSettings.getInstance(),
154                              [$('manage-galleries-button')]);
155  OptionsPage.registerOverlay(PasswordManager.getInstance(),
156                              BrowserOptions.getInstance(),
157                              [$('manage-passwords')]);
158  OptionsPage.registerOverlay(ResetProfileSettingsOverlay.getInstance(),
159                              BrowserOptions.getInstance(),
160                              [$('reset-profile-settings')]);
161  OptionsPage.registerOverlay(SearchEngineManager.getInstance(),
162                              BrowserOptions.getInstance(),
163                              [$('manage-default-search-engines')]);
164  OptionsPage.registerOverlay(StartupOverlay.getInstance(),
165                              BrowserOptions.getInstance());
166  OptionsPage.registerOverlay(SyncSetupOverlay.getInstance(),
167                              BrowserOptions.getInstance(),
168                              [$('customize-sync')]);
169  if (cr.isChromeOS) {
170    OptionsPage.registerOverlay(AccountsOptions.getInstance(),
171                                BrowserOptions.getInstance(),
172                                [$('manage-accounts-button')]);
173    OptionsPage.registerOverlay(BluetoothOptions.getInstance(),
174                                BrowserOptions.getInstance(),
175                                [$('bluetooth-add-device')]);
176    OptionsPage.registerOverlay(BluetoothPairing.getInstance(),
177                                BrowserOptions.getInstance());
178    OptionsPage.registerOverlay(FactoryResetOverlay.getInstance(),
179                                BrowserOptions.getInstance(),
180                                [$('factory-reset-restart')]);
181    OptionsPage.registerOverlay(ChangePictureOptions.getInstance(),
182                                BrowserOptions.getInstance(),
183                                [$('account-picture')]);
184    OptionsPage.registerOverlay(DetailsInternetPage.getInstance(),
185                                BrowserOptions.getInstance());
186    OptionsPage.registerOverlay(DisplayOptions.getInstance(),
187                                BrowserOptions.getInstance(),
188                                [$('display-options')]);
189    OptionsPage.registerOverlay(DisplayOverscan.getInstance(),
190                                DisplayOptions.getInstance());
191    OptionsPage.registerOverlay(KeyboardOverlay.getInstance(),
192                                BrowserOptions.getInstance(),
193                                [$('keyboard-settings-button')]);
194    OptionsPage.registerOverlay(PointerOverlay.getInstance(),
195                                BrowserOptions.getInstance(),
196                                [$('pointer-settings-button')]);
197    OptionsPage.registerOverlay(PreferredNetworks.getInstance(),
198                                BrowserOptions.getInstance());
199  }
200
201  if (!cr.isWindows && !cr.isMac) {
202    OptionsPage.registerOverlay(CertificateBackupOverlay.getInstance(),
203                                CertificateManager.getInstance());
204    OptionsPage.registerOverlay(CertificateEditCaTrustOverlay.getInstance(),
205                                CertificateManager.getInstance());
206    OptionsPage.registerOverlay(CertificateImportErrorOverlay.getInstance(),
207                                CertificateManager.getInstance());
208    OptionsPage.registerOverlay(CertificateManager.getInstance(),
209                                BrowserOptions.getInstance(),
210                                [$('certificatesManageButton')]);
211    OptionsPage.registerOverlay(CertificateRestoreOverlay.getInstance(),
212                                CertificateManager.getInstance());
213  }
214
215  cr.ui.FocusManager.disableMouseFocusOnButtons();
216  OptionsFocusManager.getInstance().initialize();
217  Preferences.getInstance().initialize();
218  ResetProfileSettingsBanner.getInstance().initialize();
219  OptionsPage.initialize();
220
221  var path = document.location.pathname;
222
223  if (path.length > 1) {
224    // Skip starting slash and remove trailing slash (if any).
225    var pageName = path.slice(1).replace(/\/$/, '');
226    OptionsPage.showPageByName(pageName, true, {replaceState: true});
227  } else {
228    OptionsPage.showDefaultPage();
229  }
230
231  var subpagesNavTabs = document.querySelectorAll('.subpages-nav-tabs');
232  for (var i = 0; i < subpagesNavTabs.length; i++) {
233    subpagesNavTabs[i].onclick = function(event) {
234      OptionsPage.showTab(event.srcElement);
235    };
236  }
237
238  window.setTimeout(function() {
239    document.documentElement.classList.remove('loading');
240  });
241}
242
243document.documentElement.classList.add('loading');
244document.addEventListener('DOMContentLoaded', load);
245
246/**
247 * Listener for the |beforeunload| event.
248 */
249window.onbeforeunload = function() {
250  options.OptionsPage.willClose();
251};
252
253/**
254 * Listener for the |popstate| event.
255 * @param {Event} e The |popstate| event.
256 */
257window.onpopstate = function(e) {
258  options.OptionsPage.setState(e.state);
259};
260