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