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