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