| Index: chrome/browser/resources/options2/browser_options.js
|
| diff --git a/chrome/browser/resources/options2/browser_options.js b/chrome/browser/resources/options2/browser_options.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..ba59d3d2a0de56eaaa9434d007c1a67c54b34e40
|
| --- /dev/null
|
| +++ b/chrome/browser/resources/options2/browser_options.js
|
| @@ -0,0 +1,366 @@
|
| +// Copyright (c) 2011 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.
|
| +
|
| +cr.define('options', function() {
|
| + const OptionsPage = options.OptionsPage;
|
| + const ArrayDataModel = cr.ui.ArrayDataModel;
|
| +
|
| + //
|
| + // BrowserOptions class
|
| + // Encapsulated handling of browser options page.
|
| + //
|
| + function BrowserOptions() {
|
| + OptionsPage.call(this, 'browser',
|
| + templateData.browserPageTabTitle,
|
| + 'browserPage');
|
| + }
|
| +
|
| + cr.addSingletonGetter(BrowserOptions);
|
| +
|
| + BrowserOptions.prototype = {
|
| + // Inherit BrowserOptions from OptionsPage.
|
| + __proto__: options.OptionsPage.prototype,
|
| +
|
| + startup_pages_pref_: {
|
| + 'name': 'session.urls_to_restore_on_startup',
|
| + 'disabled': false
|
| + },
|
| +
|
| + /**
|
| + * At autocomplete list that can be attached to a text field during editing.
|
| + * @type {HTMLElement}
|
| + * @private
|
| + */
|
| + autocompleteList_: null,
|
| +
|
| + // The cached value of the instant.confirm_dialog_shown preference.
|
| + instantConfirmDialogShown_: false,
|
| +
|
| + /**
|
| + * Initialize BrowserOptions page.
|
| + */
|
| + initializePage: function() {
|
| + // Call base class implementation to start preference initialization.
|
| + OptionsPage.prototype.initializePage.call(this);
|
| +
|
| + // Wire up controls.
|
| + $('startupUseCurrentButton').onclick = function(event) {
|
| + chrome.send('setStartupPagesToCurrentPages');
|
| + };
|
| + $('defaultSearchManageEnginesButton').onclick = function(event) {
|
| + OptionsPage.navigateToPage('searchEngines');
|
| + chrome.send('coreOptionsUserMetricsAction',
|
| + ['Options_ManageSearchEngines']);
|
| + };
|
| + $('defaultSearchEngine').onchange = this.setDefaultSearchEngine_;
|
| +
|
| + var self = this;
|
| + $('instantEnabledCheckbox').customChangeHandler = function(event) {
|
| + if (this.checked) {
|
| + if (self.instantConfirmDialogShown_)
|
| + chrome.send('enableInstant');
|
| + else
|
| + OptionsPage.navigateToPage('instantConfirm');
|
| + } else {
|
| + chrome.send('disableInstant');
|
| + }
|
| + return true;
|
| + };
|
| +
|
| + $('instantFieldTrialCheckbox').addEventListener('change',
|
| + function(event) {
|
| + this.checked = true;
|
| + chrome.send('disableInstant');
|
| + });
|
| +
|
| + Preferences.getInstance().addEventListener('instant.confirm_dialog_shown',
|
| + this.onInstantConfirmDialogShownChanged_.bind(this));
|
| +
|
| + Preferences.getInstance().addEventListener('instant.enabled',
|
| + this.onInstantEnabledChanged_.bind(this));
|
| +
|
| + Preferences.getInstance().addEventListener(
|
| + $('homepageUseNTPButton').pref,
|
| + this.onHomepageUseNTPChanged_);
|
| + var homepageField = $('homepageURL');
|
| + homepageField.addEventListener('focus', function(event) {
|
| + self.autocompleteList_.attachToInput(homepageField);
|
| + });
|
| + homepageField.addEventListener('blur', function(event) {
|
| + self.autocompleteList_.detach();
|
| + });
|
| + homepageField.addEventListener('keydown', function(event) {
|
| + // Remove focus when the user hits enter since people expect feedback
|
| + // indicating that they are done editing.
|
| + if (event.keyIdentifier == 'Enter')
|
| + homepageField.blur();
|
| + });
|
| +
|
| + // Text fields may change widths when the window changes size, so make
|
| + // sure the suggestion list stays in sync.
|
| + window.addEventListener('resize', function() {
|
| + self.autocompleteList_.syncWidthToInput();
|
| + });
|
| +
|
| + // Ensure that changes are committed when closing the page.
|
| + window.addEventListener('unload', function() {
|
| + if (document.activeElement == homepageField)
|
| + homepageField.blur();
|
| + });
|
| +
|
| + if (!cr.isChromeOS) {
|
| + $('defaultBrowserUseAsDefaultButton').onclick = function(event) {
|
| + chrome.send('becomeDefaultBrowser');
|
| + };
|
| + }
|
| +
|
| + var startupPagesList = $('startupPagesList');
|
| + options.browser_options.StartupPageList.decorate(startupPagesList);
|
| + startupPagesList.autoExpands = true;
|
| +
|
| + // Check if we are in the guest mode.
|
| + if (cr.commandLine && cr.commandLine.options['--bwsi']) {
|
| + // Hide the startup section.
|
| + $('startupSection').hidden = true;
|
| + } else {
|
| + // Initialize control enabled states.
|
| + Preferences.getInstance().addEventListener('session.restore_on_startup',
|
| + this.updateCustomStartupPageControlStates_.bind(this));
|
| + Preferences.getInstance().addEventListener(
|
| + this.startup_pages_pref_.name,
|
| + this.handleStartupPageListChange_.bind(this));
|
| +
|
| + this.updateCustomStartupPageControlStates_();
|
| + }
|
| +
|
| + var suggestionList = new options.AutocompleteList();
|
| + suggestionList.autoExpands = true;
|
| + suggestionList.suggestionUpdateRequestCallback =
|
| + this.requestAutocompleteSuggestions_.bind(this);
|
| + $('main-content').appendChild(suggestionList);
|
| + this.autocompleteList_ = suggestionList;
|
| + startupPagesList.autocompleteList = suggestionList;
|
| + },
|
| +
|
| + /**
|
| + * Called when the value of the instant.confirm_dialog_shown preference
|
| + * changes. Cache this value.
|
| + * @param {Event} event Change event.
|
| + * @private
|
| + */
|
| + onInstantConfirmDialogShownChanged_: function(event) {
|
| + this.instantConfirmDialogShown_ = event.value['value'];
|
| + },
|
| +
|
| + /**
|
| + * Called when the value of the instant.enabled preference changes. Request
|
| + * the state of the Instant field trial experiment.
|
| + * @param {Event} event Change event.
|
| + * @private
|
| + */
|
| + onInstantEnabledChanged_: function(event) {
|
| + chrome.send('getInstantFieldTrialStatus');
|
| + },
|
| +
|
| + /**
|
| + * Called to set the Instant field trial status.
|
| + * @param {boolean} enabled If true, the experiment is enabled.
|
| + * @private
|
| + */
|
| + setInstantFieldTrialStatus_: function(enabled) {
|
| + $('instantEnabledCheckbox').hidden = enabled;
|
| + $('instantFieldTrialCheckbox').hidden = !enabled;
|
| + $('instantLabel').htmlFor = enabled ? 'instantFieldTrialCheckbox'
|
| + : 'instantEnabledCheckbox';
|
| + },
|
| +
|
| + /**
|
| + * Called when the value of the homepage-use-NTP pref changes.
|
| + * Updates the disabled state of the homepage text field.
|
| + * Notice that the text field can be disabled for other reasons too
|
| + * (it can be managed by policy, for instance).
|
| + * @param {Event} event Change event.
|
| + * @private
|
| + */
|
| + onHomepageUseNTPChanged_: function(event) {
|
| + var homepageField = $('homepageURL');
|
| + var homepageUseURLButton = $('homepageUseURLButton');
|
| + homepageField.setDisabled('radioNotSelected',
|
| + !homepageUseURLButton.checked);
|
| + },
|
| +
|
| + /**
|
| + * Update the Default Browsers section based on the current state.
|
| + * @param {string} statusString Description of the current default state.
|
| + * @param {boolean} isDefault Whether or not the browser is currently
|
| + * default.
|
| + * @param {boolean} canBeDefault Whether or not the browser can be default.
|
| + * @private
|
| + */
|
| + updateDefaultBrowserState_: function(statusString, isDefault,
|
| + canBeDefault) {
|
| + var label = $('defaultBrowserState');
|
| + label.textContent = statusString;
|
| +
|
| + $('defaultBrowserUseAsDefaultButton').disabled = !canBeDefault ||
|
| + isDefault;
|
| + },
|
| +
|
| + /**
|
| + * Clears the search engine popup.
|
| + * @private
|
| + */
|
| + clearSearchEngines_: function() {
|
| + $('defaultSearchEngine').textContent = '';
|
| + },
|
| +
|
| + /**
|
| + * Updates the search engine popup with the given entries.
|
| + * @param {Array} engines List of available search engines.
|
| + * @param {number} defaultValue The value of the current default engine.
|
| + * @param {boolean} defaultManaged Whether the default search provider is
|
| + * managed. If true, the default search provider can't be changed.
|
| + */
|
| + updateSearchEngines_: function(engines, defaultValue, defaultManaged) {
|
| + this.clearSearchEngines_();
|
| + engineSelect = $('defaultSearchEngine');
|
| + engineSelect.disabled = defaultManaged;
|
| + engineCount = engines.length;
|
| + var defaultIndex = -1;
|
| + for (var i = 0; i < engineCount; i++) {
|
| + var engine = engines[i];
|
| + var option = new Option(engine['name'], engine['index']);
|
| + if (defaultValue == option.value)
|
| + defaultIndex = i;
|
| + engineSelect.appendChild(option);
|
| + }
|
| + if (defaultIndex >= 0)
|
| + engineSelect.selectedIndex = defaultIndex;
|
| + },
|
| +
|
| + /**
|
| + * Returns true if the custom startup page control block should
|
| + * be enabled.
|
| + * @returns {boolean} Whether the startup page controls should be
|
| + * enabled.
|
| + */
|
| + shouldEnableCustomStartupPageControls: function(pages) {
|
| + return $('startupShowPagesButton').checked &&
|
| + !this.startup_pages_pref_.disabled;
|
| + },
|
| +
|
| + /**
|
| + * Updates the startup pages list with the given entries.
|
| + * @param {Array} pages List of startup pages.
|
| + * @private
|
| + */
|
| + updateStartupPages_: function(pages) {
|
| + var model = new ArrayDataModel(pages);
|
| + // Add a "new page" row.
|
| + model.push({
|
| + 'modelIndex': '-1'
|
| + });
|
| + $('startupPagesList').dataModel = model;
|
| + },
|
| +
|
| + /**
|
| + * Sets the enabled state of the custom startup page list controls
|
| + * based on the current startup radio button selection.
|
| + * @private
|
| + */
|
| + updateCustomStartupPageControlStates_: function() {
|
| + var disable = !this.shouldEnableCustomStartupPageControls();
|
| + var startupPagesList = $('startupPagesList');
|
| + startupPagesList.disabled = disable;
|
| + startupPagesList.setAttribute('tabindex', disable ? -1 : 0);
|
| + // Explicitly set disabled state for input text elements.
|
| + var inputs = startupPagesList.querySelectorAll("input[type='text']");
|
| + for (var i = 0; i < inputs.length; i++)
|
| + inputs[i].disabled = disable;
|
| + $('startupUseCurrentButton').disabled = disable;
|
| + },
|
| +
|
| + /**
|
| + * Handle change events of the preference
|
| + * 'session.urls_to_restore_on_startup'.
|
| + * @param {event} preference changed event.
|
| + * @private
|
| + */
|
| + handleStartupPageListChange_: function(event) {
|
| + this.startup_pages_pref_.disabled = event.value['disabled'];
|
| + this.updateCustomStartupPageControlStates_();
|
| + },
|
| +
|
| + /**
|
| + * Set the default search engine based on the popup selection.
|
| + */
|
| + setDefaultSearchEngine_: function() {
|
| + var engineSelect = $('defaultSearchEngine');
|
| + var selectedIndex = engineSelect.selectedIndex;
|
| + if (selectedIndex >= 0) {
|
| + var selection = engineSelect.options[selectedIndex];
|
| + chrome.send('setDefaultSearchEngine', [String(selection.value)]);
|
| + }
|
| + },
|
| +
|
| + /**
|
| + * Sends an asynchronous request for new autocompletion suggestions for the
|
| + * the given query. When new suggestions are available, the C++ handler will
|
| + * call updateAutocompleteSuggestions_.
|
| + * @param {string} query List of autocomplete suggestions.
|
| + * @private
|
| + */
|
| + requestAutocompleteSuggestions_: function(query) {
|
| + chrome.send('requestAutocompleteSuggestions', [query]);
|
| + },
|
| +
|
| + /**
|
| + * Updates the autocomplete suggestion list with the given entries.
|
| + * @param {Array} pages List of autocomplete suggestions.
|
| + * @private
|
| + */
|
| + updateAutocompleteSuggestions_: function(suggestions) {
|
| + var list = this.autocompleteList_;
|
| + // If the trigger for this update was a value being selected from the
|
| + // current list, do nothing.
|
| + if (list.targetInput && list.selectedItem &&
|
| + list.selectedItem['url'] == list.targetInput.value)
|
| + return;
|
| + list.suggestions = suggestions;
|
| + },
|
| + };
|
| +
|
| + BrowserOptions.updateDefaultBrowserState = function(statusString, isDefault,
|
| + canBeDefault) {
|
| + if (!cr.isChromeOS) {
|
| + BrowserOptions.getInstance().updateDefaultBrowserState_(statusString,
|
| + isDefault,
|
| + canBeDefault);
|
| + }
|
| + };
|
| +
|
| + BrowserOptions.updateSearchEngines = function(engines, defaultValue,
|
| + defaultManaged) {
|
| + BrowserOptions.getInstance().updateSearchEngines_(engines, defaultValue,
|
| + defaultManaged);
|
| + };
|
| +
|
| + BrowserOptions.updateStartupPages = function(pages) {
|
| + BrowserOptions.getInstance().updateStartupPages_(pages);
|
| + };
|
| +
|
| + BrowserOptions.updateAutocompleteSuggestions = function(suggestions) {
|
| + BrowserOptions.getInstance().updateAutocompleteSuggestions_(suggestions);
|
| + };
|
| +
|
| + BrowserOptions.setInstantFieldTrialStatus = function(enabled) {
|
| + BrowserOptions.getInstance().setInstantFieldTrialStatus_(enabled);
|
| + };
|
| +
|
| + // Export
|
| + return {
|
| + BrowserOptions: BrowserOptions
|
| + };
|
| +
|
| +});
|
|
|