Home | History | Annotate | Download | only in options
      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="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 OptionsFocusManager = options.OptionsFocusManager;
     34 var OptionsPage = options.OptionsPage;
     35 var PasswordManager = options.PasswordManager;
     36 var Preferences = options.Preferences;
     37 var PreferredNetworks = options.PreferredNetworks;
     38 var ResetProfileSettingsBanner = options.ResetProfileSettingsBanner;
     39 var ResetProfileSettingsOverlay = options.ResetProfileSettingsOverlay;
     40 var SearchEngineManager = options.SearchEngineManager;
     41 var SearchPage = options.SearchPage;
     42 var StartupOverlay = options.StartupOverlay;
     43 var SyncSetupOverlay = options.SyncSetupOverlay;
     44 var ThirdPartyImeConfirmOverlay = options.ThirdPartyImeConfirmOverlay;
     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     OptionsPage.registerOverlay(ManagedUserImportOverlay.getInstance(),
    157                                 CreateProfileOverlay.getInstance());
    158     OptionsPage.registerOverlay(ManagedUserLearnMoreOverlay.getInstance(),
    159                                 CreateProfileOverlay.getInstance());
    160   }
    161   OptionsPage.registerOverlay(PasswordManager.getInstance(),
    162                               BrowserOptions.getInstance(),
    163                               [$('manage-passwords')]);
    164   OptionsPage.registerOverlay(ResetProfileSettingsOverlay.getInstance(),
    165                               BrowserOptions.getInstance(),
    166                               [$('reset-profile-settings')]);
    167   OptionsPage.registerOverlay(SearchEngineManager.getInstance(),
    168                               BrowserOptions.getInstance(),
    169                               [$('manage-default-search-engines')]);
    170   OptionsPage.registerOverlay(StartupOverlay.getInstance(),
    171                               BrowserOptions.getInstance());
    172   OptionsPage.registerOverlay(SyncSetupOverlay.getInstance(),
    173                               BrowserOptions.getInstance(),
    174                               [$('customize-sync')]);
    175   if (cr.isChromeOS) {
    176     OptionsPage.registerOverlay(AccountsOptions.getInstance(),
    177                                 BrowserOptions.getInstance(),
    178                                 [$('manage-accounts-button')]);
    179     OptionsPage.registerOverlay(BluetoothOptions.getInstance(),
    180                                 BrowserOptions.getInstance(),
    181                                 [$('bluetooth-add-device')]);
    182     OptionsPage.registerOverlay(BluetoothPairing.getInstance(),
    183                                 BrowserOptions.getInstance());
    184     OptionsPage.registerOverlay(FactoryResetOverlay.getInstance(),
    185                                 BrowserOptions.getInstance(),
    186                                 [$('factory-reset-restart')]);
    187     OptionsPage.registerOverlay(ChangePictureOptions.getInstance(),
    188                                 BrowserOptions.getInstance(),
    189                                 [$('account-picture')]);
    190     OptionsPage.registerOverlay(DetailsInternetPage.getInstance(),
    191                                 BrowserOptions.getInstance());
    192     OptionsPage.registerOverlay(DisplayOptions.getInstance(),
    193                                 BrowserOptions.getInstance(),
    194                                 [$('display-options')]);
    195     OptionsPage.registerOverlay(DisplayOverscan.getInstance(),
    196                                 DisplayOptions.getInstance());
    197     OptionsPage.registerOverlay(KeyboardOverlay.getInstance(),
    198                                 BrowserOptions.getInstance(),
    199                                 [$('keyboard-settings-button')]);
    200     OptionsPage.registerOverlay(PointerOverlay.getInstance(),
    201                                 BrowserOptions.getInstance(),
    202                                 [$('pointer-settings-button')]);
    203     OptionsPage.registerOverlay(PreferredNetworks.getInstance(),
    204                                 BrowserOptions.getInstance());
    205     OptionsPage.registerOverlay(ThirdPartyImeConfirmOverlay.getInstance(),
    206                                 LanguageOptions.getInstance());
    207   }
    208 
    209   if (!cr.isWindows && !cr.isMac) {
    210     OptionsPage.registerOverlay(CertificateBackupOverlay.getInstance(),
    211                                 CertificateManager.getInstance());
    212     OptionsPage.registerOverlay(CertificateEditCaTrustOverlay.getInstance(),
    213                                 CertificateManager.getInstance());
    214     OptionsPage.registerOverlay(CertificateImportErrorOverlay.getInstance(),
    215                                 CertificateManager.getInstance());
    216     OptionsPage.registerOverlay(CertificateManager.getInstance(),
    217                                 BrowserOptions.getInstance(),
    218                                 [$('certificatesManageButton')]);
    219     OptionsPage.registerOverlay(CertificateRestoreOverlay.getInstance(),
    220                                 CertificateManager.getInstance());
    221   }
    222 
    223   cr.ui.FocusManager.disableMouseFocusOnButtons();
    224   OptionsFocusManager.getInstance().initialize();
    225   Preferences.getInstance().initialize();
    226   ResetProfileSettingsBanner.getInstance().initialize();
    227   AutomaticSettingsResetBanner.getInstance().initialize();
    228   OptionsPage.initialize();
    229 
    230   var pageName = OptionsPage.getPageNameFromPath();
    231   // Still update history so that chrome://settings/nonexistant redirects
    232   // appropriately to chrome://settings/. If the URL matches, updateHistory_
    233   // will avoid the extra replaceState.
    234   OptionsPage.showPageByName(pageName, true, {replaceState: true});
    235 
    236   var subpagesNavTabs = document.querySelectorAll('.subpages-nav-tabs');
    237   for (var i = 0; i < subpagesNavTabs.length; i++) {
    238     subpagesNavTabs[i].onclick = function(event) {
    239       OptionsPage.showTab(event.srcElement);
    240     };
    241   }
    242 
    243   window.setTimeout(function() {
    244     document.documentElement.classList.remove('loading');
    245     chrome.send('onFinishedLoadingOptions');
    246   });
    247 }
    248 
    249 document.documentElement.classList.add('loading');
    250 document.addEventListener('DOMContentLoaded', load);
    251 
    252 /**
    253  * Listener for the |beforeunload| event.
    254  */
    255 window.onbeforeunload = function() {
    256   options.OptionsPage.willClose();
    257 };
    258 
    259 /**
    260  * Listener for the |popstate| event.
    261  * @param {Event} e The |popstate| event.
    262  */
    263 window.onpopstate = function(e) {
    264   var pageName = options.OptionsPage.getPageNameFromPath();
    265   options.OptionsPage.setState(pageName, e.state);
    266 };
    267