text: // Copyright (c) 2012 The Chromium Authors. All rights reserved.
  // Use of this source code is governed by a BSD-style license that can be
  // found in the LICENSE file.
  
  var AddLanguageOverlay = options.AddLanguageOverlay;
  var AlertOverlay = options.AlertOverlay;
  var AutofillEditAddressOverlay = options.AutofillEditAddressOverlay;
  var AutofillEditCreditCardOverlay = options.AutofillEditCreditCardOverlay;
  var AutofillOptions = options.AutofillOptions;
  var AutomaticSettingsResetBanner = options.AutomaticSettingsResetBanner;
  var BrowserOptions = options.BrowserOptions;
  var ClearBrowserDataOverlay = options.ClearBrowserDataOverlay;
  var ConfirmDialog = options.ConfirmDialog;
  var ContentSettingsExceptionsArea =
      options.contentSettings.ContentSettingsExceptionsArea;
  var ContentSettings = options.ContentSettings;
  var CookiesView = options.CookiesView;
  var CreateProfileOverlay = options.CreateProfileOverlay;
  var EditDictionaryOverlay = cr.IsMac ? null : options.EditDictionaryOverlay;
  var EasyUnlockTurnOffOverlay = options.EasyUnlockTurnOffOverlay;
  var FactoryResetOverlay = options.FactoryResetOverlay;
  <if expr="enable_google_now">
  var GeolocationOptions = options.GeolocationOptions;
  </if>
  var FontSettings = options.FontSettings;
  var HandlerOptions = options.HandlerOptions;
  var HomePageOverlay = options.HomePageOverlay;
  var HotwordConfirmDialog = options.HotwordConfirmDialog;
  var ImportDataOverlay = options.ImportDataOverlay;
  var LanguageOptions = options.LanguageOptions;
  var ManageProfileOverlay = options.ManageProfileOverlay;
  var OptionsFocusManager = options.OptionsFocusManager;
  var OptionsPage = options.OptionsPage;
  var PageManager = cr.ui.pageManager.PageManager;
  var PasswordManager = options.PasswordManager;
  var Preferences = options.Preferences;
  var PreferredNetworks = options.PreferredNetworks;
  var ResetProfileSettingsOverlay = options.ResetProfileSettingsOverlay;
  var SearchEngineManager = options.SearchEngineManager;
  var SearchPage = options.SearchPage;
  var StartupOverlay = options.StartupOverlay;
  var SupervisedUserCreateConfirmOverlay =
      options.SupervisedUserCreateConfirmOverlay;
  var SupervisedUserImportOverlay = options.SupervisedUserImportOverlay;
  var SupervisedUserLearnMoreOverlay = options.SupervisedUserLearnMoreOverlay;
  var SyncSetupOverlay = options.SyncSetupOverlay;
  var WebsiteSettingsEditor = options.WebsiteSettings.WebsiteSettingsEditor;
  var WebsiteSettingsManager = options.WebsiteSettingsManager;
  var ThirdPartyImeConfirmOverlay = options.ThirdPartyImeConfirmOverlay;
  
  /**
   * DOMContentLoaded handler, sets up the page.
   */
  function load() {
    // Decorate the existing elements in the document.
    cr.ui.decorate('input[pref][type=checkbox]', options.PrefCheckbox);
    cr.ui.decorate('input[pref][type=number]', options.PrefNumber);
    cr.ui.decorate('input[pref][type=radio]', options.PrefRadio);
    cr.ui.decorate('input[pref][type=range]', options.PrefRange);
    cr.ui.decorate('select[pref]', options.PrefSelect);
    cr.ui.decorate('input[pref][type=text]', options.PrefTextField);
    cr.ui.decorate('input[pref][type=url]', options.PrefTextField);
    cr.ui.decorate('button[pref]', options.PrefButton);
    cr.ui.decorate('#content-settings-page input[type=radio]:not(.handler-radio)',
        options.ContentSettingsRadio);
    cr.ui.decorate('#content-settings-page input[type=radio].handler-radio',
        options.HandlersEnabledRadio);
    cr.ui.decorate('span.controlled-setting-indicator',
        options.ControlledSettingIndicator);
  
    // Top level pages.
    PageManager.register(SearchPage.getInstance());
    PageManager.register(BrowserOptions.getInstance());
  
    // Overlays.
    PageManager.registerOverlay(AddLanguageOverlay.getInstance(),
                                LanguageOptions.getInstance());
    PageManager.registerOverlay(AlertOverlay.getInstance());
    PageManager.registerOverlay(AutofillEditAddressOverlay.getInstance(),
                                AutofillOptions.getInstance());
    PageManager.registerOverlay(AutofillEditCreditCardOverlay.getInstance(),
                                AutofillOptions.getInstance());
    PageManager.registerOverlay(AutofillOptions.getInstance(),
                                BrowserOptions.getInstance(),
                                [$('autofill-settings')]);
    PageManager.registerOverlay(ClearBrowserDataOverlay.getInstance(),
                                BrowserOptions.getInstance(),
                                [$('privacyClearDataButton')]);
    PageManager.registerOverlay(
        new ConfirmDialog(
            'doNotTrackConfirm',
            loadTimeData.getString('doNotTrackConfirmOverlayTabTitle'),
            'do-not-track-confirm-overlay',
            $('do-not-track-confirm-ok'),
            $('do-not-track-confirm-cancel'),
            $('do-not-track-enabled').pref,
            $('do-not-track-enabled').metric),
        BrowserOptions.getInstance());
    // 'spelling-enabled-control' element is only present on Chrome branded
    // builds.
    if ($('spelling-enabled-control')) {
      PageManager.registerOverlay(
          new ConfirmDialog(
              'spellingConfirm',
              loadTimeData.getString('spellingConfirmOverlayTabTitle'),
              'spelling-confirm-overlay',
              $('spelling-confirm-ok'),
              $('spelling-confirm-cancel'),
              $('spelling-enabled-control').pref,
              $('spelling-enabled-control').metric),
          BrowserOptions.getInstance());
    }
    PageManager.registerOverlay(new HotwordConfirmDialog(),
                                BrowserOptions.getInstance());
    PageManager.registerOverlay(ContentSettings.getInstance(),
                                BrowserOptions.getInstance(),
                                [$('privacyContentSettingsButton')]);
    PageManager.registerOverlay(WebsiteSettingsManager.getInstance(),
                                BrowserOptions.getInstance(),
                                [$('website-management-button')]);
    PageManager.registerOverlay(WebsiteSettingsEditor.getInstance(),
                                WebsiteSettingsManager.getInstance());
    PageManager.registerOverlay(ContentSettingsExceptionsArea.getInstance(),
                                ContentSettings.getInstance());
    PageManager.registerOverlay(CookiesView.getInstance(),
                                ContentSettings.getInstance(),
                                [$('privacyContentSettingsButton'),
                                 $('show-cookies-button')]);
    PageManager.registerOverlay(CreateProfileOverlay.getInstance(),
                                BrowserOptions.getInstance());
    PageManager.registerOverlay(EasyUnlockTurnOffOverlay.getInstance(),
                                BrowserOptions.getInstance(),
                                [$('easy-unlock-turn-off-button')]);
    if (!cr.isMac) {
      PageManager.registerOverlay(EditDictionaryOverlay.getInstance(),
                                  LanguageOptions.getInstance(),
                                  [$('edit-dictionary-button')]);
    }
    PageManager.registerOverlay(FontSettings.getInstance(),
                                BrowserOptions.getInstance(),
                                [$('fontSettingsCustomizeFontsButton')]);
    if (HandlerOptions && $('manage-handlers-button')) {
      PageManager.registerOverlay(HandlerOptions.getInstance(),
                                  ContentSettings.getInstance(),
                                  [$('manage-handlers-button')]);
    }
    PageManager.registerOverlay(HomePageOverlay.getInstance(),
                                BrowserOptions.getInstance(),
                                [$('change-home-page')]);
    PageManager.registerOverlay(ImportDataOverlay.getInstance(),
                                BrowserOptions.getInstance());
    PageManager.registerOverlay(LanguageOptions.getInstance(),
                                BrowserOptions.getInstance(),
                                [$('language-button'),
                                 $('manage-languages')]);
    PageManager.registerOverlay(ManageProfileOverlay.getInstance(),
                                BrowserOptions.getInstance());
    if (!cr.isChromeOS) {
      PageManager.registerOverlay(SupervisedUserCreateConfirmOverlay.
                                      getInstance(),
                                  BrowserOptions.getInstance());
      PageManager.registerOverlay(SupervisedUserImportOverlay.getInstance(),
                                  CreateProfileOverlay.getInstance());
      PageManager.registerOverlay(SupervisedUserLearnMoreOverlay.getInstance(),
                                  CreateProfileOverlay.getInstance());
    }
    PageManager.registerOverlay(PasswordManager.getInstance(),
                                BrowserOptions.getInstance(),
                                [$('manage-passwords')]);
    PageManager.registerOverlay(ResetProfileSettingsOverlay.getInstance(),
                                BrowserOptions.getInstance(),
                                [$('reset-profile-settings')]);
    PageManager.registerOverlay(SearchEngineManager.getInstance(),
                                BrowserOptions.getInstance(),
                                [$('manage-default-search-engines')]);
    PageManager.registerOverlay(StartupOverlay.getInstance(),
                                BrowserOptions.getInstance());
    PageManager.registerOverlay(SyncSetupOverlay.getInstance(),
                                BrowserOptions.getInstance(),
                                [$('customize-sync')]);
    if (cr.isChromeOS) {
      PageManager.registerOverlay(AccountsOptions.getInstance(),
                                  BrowserOptions.getInstance(),
                                  [$('manage-accounts-button')]);
      PageManager.registerOverlay(BluetoothOptions.getInstance(),
                                  BrowserOptions.getInstance(),
                                  [$('bluetooth-add-device')]);
      PageManager.registerOverlay(BluetoothPairing.getInstance(),
                                  BrowserOptions.getInstance());
      PageManager.registerOverlay(FactoryResetOverlay.getInstance(),
                                  BrowserOptions.getInstance(),
                                  [$('factory-reset-restart')]);
      PageManager.registerOverlay(ChangePictureOptions.getInstance(),
                                  BrowserOptions.getInstance(),
                                  [$('account-picture')]);
      PageManager.registerOverlay(ConsumerManagementOverlay.getInstance(),
                                  BrowserOptions.getInstance());
      PageManager.registerOverlay(DetailsInternetPage.getInstance(),
                                  BrowserOptions.getInstance());
      PageManager.registerOverlay(DisplayOptions.getInstance(),
                                  BrowserOptions.getInstance(),
                                  [$('display-options')]);
      PageManager.registerOverlay(DisplayOverscan.getInstance(),
                                  DisplayOptions.getInstance());
      PageManager.registerOverlay(KeyboardOverlay.getInstance(),
                                  BrowserOptions.getInstance(),
                                  [$('keyboard-settings-button')]);
      PageManager.registerOverlay(PointerOverlay.getInstance(),
                                  BrowserOptions.getInstance(),
                                  [$('pointer-settings-button')]);
      PageManager.registerOverlay(PreferredNetworks.getInstance(),
                                  BrowserOptions.getInstance());
      PageManager.registerOverlay(ThirdPartyImeConfirmOverlay.getInstance(),
                                  LanguageOptions.getInstance());
      if (loadTimeData.getBoolean('showVersion')) {
        PageManager.registerOverlay(help.ChannelChangePage.getInstance(),
                                    help.HelpPage.getInstance());
        PageManager.registerOverlay(help.HelpPage.getInstance(),
                                    BrowserOptions.getInstance());
      }
    }
  
    if (!cr.isWindows && !cr.isMac) {
      PageManager.registerOverlay(CertificateBackupOverlay.getInstance(),
                                  CertificateManager.getInstance());
      PageManager.registerOverlay(CertificateEditCaTrustOverlay.getInstance(),
                                  CertificateManager.getInstance());
      PageManager.registerOverlay(CertificateImportErrorOverlay.getInstance(),
                                  CertificateManager.getInstance());
      PageManager.registerOverlay(CertificateManager.getInstance(),
                                  BrowserOptions.getInstance(),
                                  [$('certificatesManageButton')]);
      PageManager.registerOverlay(CertificateRestoreOverlay.getInstance(),
                                  CertificateManager.getInstance());
    }
  
    cr.ui.FocusManager.disableMouseFocusOnButtons();
    OptionsFocusManager.getInstance().initialize();
    Preferences.getInstance().initialize();
    AutomaticSettingsResetBanner.getInstance().initialize();
    OptionsPage.initialize();
    PageManager.initialize(BrowserOptions.getInstance());
    PageManager.addObserver(new uber.PageManagerObserver());
    uber.onContentFrameLoaded();
  
    var pageName = PageManager.getPageNameFromPath();
    // Still update history so that chrome://settings/nonexistant redirects
    // appropriately to chrome://settings/. If the URL matches, updateHistory_
    // will avoid the extra replaceState.
    var updateHistory = true;
    PageManager.showPageByName(pageName, updateHistory, {replaceState: true});
  
    var subpagesNavTabs = document.querySelectorAll('.subpages-nav-tabs');
    for (var i = 0; i < subpagesNavTabs.length; i++) {
      subpagesNavTabs[i].onclick = function(event) {
        OptionsPage.showTab(event.srcElement);
      };
    }
  
    window.setTimeout(function() {
      document.documentElement.classList.remove('loading');
      chrome.send('onFinishedLoadingOptions');
    });
  }
  
  document.documentElement.classList.add('loading');
  document.addEventListener('DOMContentLoaded', load);
  
  /**
   * Listener for the |beforeunload| event.
   */
  window.onbeforeunload = function() {
    PageManager.willClose();
  };
  
  /**
   * Listener for the |popstate| event.
   * @param {Event} e The |popstate| event.
   */
  window.onpopstate = function(e) {
    var pageName = PageManager.getPageNameFromPath();
    PageManager.setState(pageName, e.state);
  };
  