Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2236)

Unified Diff: chrome/browser/resources/options2/browser_options.js

Issue 8895023: Options2: Pull the trigger. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: DIAF. Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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
+ };
+
+});
« no previous file with comments | « chrome/browser/resources/options2/browser_options.html ('k') | chrome/browser/resources/options2/browser_options_page.css » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698