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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2011 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 cr.define('options', function() {
6 const OptionsPage = options.OptionsPage;
7 const ArrayDataModel = cr.ui.ArrayDataModel;
8
9 //
10 // BrowserOptions class
11 // Encapsulated handling of browser options page.
12 //
13 function BrowserOptions() {
14 OptionsPage.call(this, 'browser',
15 templateData.browserPageTabTitle,
16 'browserPage');
17 }
18
19 cr.addSingletonGetter(BrowserOptions);
20
21 BrowserOptions.prototype = {
22 // Inherit BrowserOptions from OptionsPage.
23 __proto__: options.OptionsPage.prototype,
24
25 startup_pages_pref_: {
26 'name': 'session.urls_to_restore_on_startup',
27 'disabled': false
28 },
29
30 /**
31 * At autocomplete list that can be attached to a text field during editing.
32 * @type {HTMLElement}
33 * @private
34 */
35 autocompleteList_: null,
36
37 // The cached value of the instant.confirm_dialog_shown preference.
38 instantConfirmDialogShown_: false,
39
40 /**
41 * Initialize BrowserOptions page.
42 */
43 initializePage: function() {
44 // Call base class implementation to start preference initialization.
45 OptionsPage.prototype.initializePage.call(this);
46
47 // Wire up controls.
48 $('startupUseCurrentButton').onclick = function(event) {
49 chrome.send('setStartupPagesToCurrentPages');
50 };
51 $('defaultSearchManageEnginesButton').onclick = function(event) {
52 OptionsPage.navigateToPage('searchEngines');
53 chrome.send('coreOptionsUserMetricsAction',
54 ['Options_ManageSearchEngines']);
55 };
56 $('defaultSearchEngine').onchange = this.setDefaultSearchEngine_;
57
58 var self = this;
59 $('instantEnabledCheckbox').customChangeHandler = function(event) {
60 if (this.checked) {
61 if (self.instantConfirmDialogShown_)
62 chrome.send('enableInstant');
63 else
64 OptionsPage.navigateToPage('instantConfirm');
65 } else {
66 chrome.send('disableInstant');
67 }
68 return true;
69 };
70
71 $('instantFieldTrialCheckbox').addEventListener('change',
72 function(event) {
73 this.checked = true;
74 chrome.send('disableInstant');
75 });
76
77 Preferences.getInstance().addEventListener('instant.confirm_dialog_shown',
78 this.onInstantConfirmDialogShownChanged_.bind(this));
79
80 Preferences.getInstance().addEventListener('instant.enabled',
81 this.onInstantEnabledChanged_.bind(this));
82
83 Preferences.getInstance().addEventListener(
84 $('homepageUseNTPButton').pref,
85 this.onHomepageUseNTPChanged_);
86 var homepageField = $('homepageURL');
87 homepageField.addEventListener('focus', function(event) {
88 self.autocompleteList_.attachToInput(homepageField);
89 });
90 homepageField.addEventListener('blur', function(event) {
91 self.autocompleteList_.detach();
92 });
93 homepageField.addEventListener('keydown', function(event) {
94 // Remove focus when the user hits enter since people expect feedback
95 // indicating that they are done editing.
96 if (event.keyIdentifier == 'Enter')
97 homepageField.blur();
98 });
99
100 // Text fields may change widths when the window changes size, so make
101 // sure the suggestion list stays in sync.
102 window.addEventListener('resize', function() {
103 self.autocompleteList_.syncWidthToInput();
104 });
105
106 // Ensure that changes are committed when closing the page.
107 window.addEventListener('unload', function() {
108 if (document.activeElement == homepageField)
109 homepageField.blur();
110 });
111
112 if (!cr.isChromeOS) {
113 $('defaultBrowserUseAsDefaultButton').onclick = function(event) {
114 chrome.send('becomeDefaultBrowser');
115 };
116 }
117
118 var startupPagesList = $('startupPagesList');
119 options.browser_options.StartupPageList.decorate(startupPagesList);
120 startupPagesList.autoExpands = true;
121
122 // Check if we are in the guest mode.
123 if (cr.commandLine && cr.commandLine.options['--bwsi']) {
124 // Hide the startup section.
125 $('startupSection').hidden = true;
126 } else {
127 // Initialize control enabled states.
128 Preferences.getInstance().addEventListener('session.restore_on_startup',
129 this.updateCustomStartupPageControlStates_.bind(this));
130 Preferences.getInstance().addEventListener(
131 this.startup_pages_pref_.name,
132 this.handleStartupPageListChange_.bind(this));
133
134 this.updateCustomStartupPageControlStates_();
135 }
136
137 var suggestionList = new options.AutocompleteList();
138 suggestionList.autoExpands = true;
139 suggestionList.suggestionUpdateRequestCallback =
140 this.requestAutocompleteSuggestions_.bind(this);
141 $('main-content').appendChild(suggestionList);
142 this.autocompleteList_ = suggestionList;
143 startupPagesList.autocompleteList = suggestionList;
144 },
145
146 /**
147 * Called when the value of the instant.confirm_dialog_shown preference
148 * changes. Cache this value.
149 * @param {Event} event Change event.
150 * @private
151 */
152 onInstantConfirmDialogShownChanged_: function(event) {
153 this.instantConfirmDialogShown_ = event.value['value'];
154 },
155
156 /**
157 * Called when the value of the instant.enabled preference changes. Request
158 * the state of the Instant field trial experiment.
159 * @param {Event} event Change event.
160 * @private
161 */
162 onInstantEnabledChanged_: function(event) {
163 chrome.send('getInstantFieldTrialStatus');
164 },
165
166 /**
167 * Called to set the Instant field trial status.
168 * @param {boolean} enabled If true, the experiment is enabled.
169 * @private
170 */
171 setInstantFieldTrialStatus_: function(enabled) {
172 $('instantEnabledCheckbox').hidden = enabled;
173 $('instantFieldTrialCheckbox').hidden = !enabled;
174 $('instantLabel').htmlFor = enabled ? 'instantFieldTrialCheckbox'
175 : 'instantEnabledCheckbox';
176 },
177
178 /**
179 * Called when the value of the homepage-use-NTP pref changes.
180 * Updates the disabled state of the homepage text field.
181 * Notice that the text field can be disabled for other reasons too
182 * (it can be managed by policy, for instance).
183 * @param {Event} event Change event.
184 * @private
185 */
186 onHomepageUseNTPChanged_: function(event) {
187 var homepageField = $('homepageURL');
188 var homepageUseURLButton = $('homepageUseURLButton');
189 homepageField.setDisabled('radioNotSelected',
190 !homepageUseURLButton.checked);
191 },
192
193 /**
194 * Update the Default Browsers section based on the current state.
195 * @param {string} statusString Description of the current default state.
196 * @param {boolean} isDefault Whether or not the browser is currently
197 * default.
198 * @param {boolean} canBeDefault Whether or not the browser can be default.
199 * @private
200 */
201 updateDefaultBrowserState_: function(statusString, isDefault,
202 canBeDefault) {
203 var label = $('defaultBrowserState');
204 label.textContent = statusString;
205
206 $('defaultBrowserUseAsDefaultButton').disabled = !canBeDefault ||
207 isDefault;
208 },
209
210 /**
211 * Clears the search engine popup.
212 * @private
213 */
214 clearSearchEngines_: function() {
215 $('defaultSearchEngine').textContent = '';
216 },
217
218 /**
219 * Updates the search engine popup with the given entries.
220 * @param {Array} engines List of available search engines.
221 * @param {number} defaultValue The value of the current default engine.
222 * @param {boolean} defaultManaged Whether the default search provider is
223 * managed. If true, the default search provider can't be changed.
224 */
225 updateSearchEngines_: function(engines, defaultValue, defaultManaged) {
226 this.clearSearchEngines_();
227 engineSelect = $('defaultSearchEngine');
228 engineSelect.disabled = defaultManaged;
229 engineCount = engines.length;
230 var defaultIndex = -1;
231 for (var i = 0; i < engineCount; i++) {
232 var engine = engines[i];
233 var option = new Option(engine['name'], engine['index']);
234 if (defaultValue == option.value)
235 defaultIndex = i;
236 engineSelect.appendChild(option);
237 }
238 if (defaultIndex >= 0)
239 engineSelect.selectedIndex = defaultIndex;
240 },
241
242 /**
243 * Returns true if the custom startup page control block should
244 * be enabled.
245 * @returns {boolean} Whether the startup page controls should be
246 * enabled.
247 */
248 shouldEnableCustomStartupPageControls: function(pages) {
249 return $('startupShowPagesButton').checked &&
250 !this.startup_pages_pref_.disabled;
251 },
252
253 /**
254 * Updates the startup pages list with the given entries.
255 * @param {Array} pages List of startup pages.
256 * @private
257 */
258 updateStartupPages_: function(pages) {
259 var model = new ArrayDataModel(pages);
260 // Add a "new page" row.
261 model.push({
262 'modelIndex': '-1'
263 });
264 $('startupPagesList').dataModel = model;
265 },
266
267 /**
268 * Sets the enabled state of the custom startup page list controls
269 * based on the current startup radio button selection.
270 * @private
271 */
272 updateCustomStartupPageControlStates_: function() {
273 var disable = !this.shouldEnableCustomStartupPageControls();
274 var startupPagesList = $('startupPagesList');
275 startupPagesList.disabled = disable;
276 startupPagesList.setAttribute('tabindex', disable ? -1 : 0);
277 // Explicitly set disabled state for input text elements.
278 var inputs = startupPagesList.querySelectorAll("input[type='text']");
279 for (var i = 0; i < inputs.length; i++)
280 inputs[i].disabled = disable;
281 $('startupUseCurrentButton').disabled = disable;
282 },
283
284 /**
285 * Handle change events of the preference
286 * 'session.urls_to_restore_on_startup'.
287 * @param {event} preference changed event.
288 * @private
289 */
290 handleStartupPageListChange_: function(event) {
291 this.startup_pages_pref_.disabled = event.value['disabled'];
292 this.updateCustomStartupPageControlStates_();
293 },
294
295 /**
296 * Set the default search engine based on the popup selection.
297 */
298 setDefaultSearchEngine_: function() {
299 var engineSelect = $('defaultSearchEngine');
300 var selectedIndex = engineSelect.selectedIndex;
301 if (selectedIndex >= 0) {
302 var selection = engineSelect.options[selectedIndex];
303 chrome.send('setDefaultSearchEngine', [String(selection.value)]);
304 }
305 },
306
307 /**
308 * Sends an asynchronous request for new autocompletion suggestions for the
309 * the given query. When new suggestions are available, the C++ handler will
310 * call updateAutocompleteSuggestions_.
311 * @param {string} query List of autocomplete suggestions.
312 * @private
313 */
314 requestAutocompleteSuggestions_: function(query) {
315 chrome.send('requestAutocompleteSuggestions', [query]);
316 },
317
318 /**
319 * Updates the autocomplete suggestion list with the given entries.
320 * @param {Array} pages List of autocomplete suggestions.
321 * @private
322 */
323 updateAutocompleteSuggestions_: function(suggestions) {
324 var list = this.autocompleteList_;
325 // If the trigger for this update was a value being selected from the
326 // current list, do nothing.
327 if (list.targetInput && list.selectedItem &&
328 list.selectedItem['url'] == list.targetInput.value)
329 return;
330 list.suggestions = suggestions;
331 },
332 };
333
334 BrowserOptions.updateDefaultBrowserState = function(statusString, isDefault,
335 canBeDefault) {
336 if (!cr.isChromeOS) {
337 BrowserOptions.getInstance().updateDefaultBrowserState_(statusString,
338 isDefault,
339 canBeDefault);
340 }
341 };
342
343 BrowserOptions.updateSearchEngines = function(engines, defaultValue,
344 defaultManaged) {
345 BrowserOptions.getInstance().updateSearchEngines_(engines, defaultValue,
346 defaultManaged);
347 };
348
349 BrowserOptions.updateStartupPages = function(pages) {
350 BrowserOptions.getInstance().updateStartupPages_(pages);
351 };
352
353 BrowserOptions.updateAutocompleteSuggestions = function(suggestions) {
354 BrowserOptions.getInstance().updateAutocompleteSuggestions_(suggestions);
355 };
356
357 BrowserOptions.setInstantFieldTrialStatus = function(enabled) {
358 BrowserOptions.getInstance().setInstantFieldTrialStatus_(enabled);
359 };
360
361 // Export
362 return {
363 BrowserOptions: BrowserOptions
364 };
365
366 });
OLDNEW
« 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