172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Use of this source code is governed by a BSD-style license that can be 3bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// found in the LICENSE file. 4bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 5bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsencr.define('options', function() { 6bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const OptionsPage = options.OptionsPage; 7bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 8bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen /** 9201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch * The number of milliseconds used for showing a message. 10201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch * @type {number} 11201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch */ 12201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch const MESSAGE_DELAY_MS = 1000; // 1 sec. 13201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 14201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch /** 15bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen * Encapsulated handling of about page. 16bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen */ 17bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen function AboutPage() { 1872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen OptionsPage.call(this, 'about', templateData.aboutPageTabTitle, 1972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 'aboutPage'); 20bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen } 21bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 22bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen cr.addSingletonGetter(AboutPage); 23bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 24bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AboutPage.prototype = { 25bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Inherit AboutPage from OptionsPage. 26bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen __proto__: OptionsPage.prototype, 27bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 28201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch /** 29201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch * The queue is used for updating the status message with delay, like: 30201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch * [["Check for update...", 1000], ["Chrome OS is up to date", 0]] 31201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch * @type {!Array.<!Array>} 32201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch */ 33201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch statusMessageQueue_: [], 34201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 35201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch /** 36201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch * True if the status message queue flush started. 37201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch * @type {boolean} 38201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch */ 39201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch statusMessageQueueFlushStarted_: false, 40201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 41ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen /** 42ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * The selected release channel. 43ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen * @type {string} 44ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen */ 45ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen selectedChannel_: '', 46ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 47bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Initialize AboutPage. 48bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen initializePage: function() { 49bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Call base class implementation to start preference initialization. 50bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen OptionsPage.prototype.initializePage.call(this); 51bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 52bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen $('checkNow').onclick = function(event) { 53bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen chrome.send('CheckNow'); 54bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen }; 55bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 56bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen $('moreInfoButton').onclick = function(event) { 57bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen $('aboutPageLessInfo').classList.add('hidden'); 58bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen $('aboutPageMoreInfo').classList.remove('hidden'); 59bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen }; 60bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 6172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (!AccountsOptions.currentUserIsOwner()) { 62513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch $('channelSelect').disabled = true; 63513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } else { 64ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen var self = this; 65513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch $('channelSelect').onchange = function(event) { 66ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen self.selectedOptionOnChange_(event.target.value); 67513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch }; 68513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 69513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 70bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Notify the handler that the page is ready. 71bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen chrome.send('PageReady'); 72bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen }, 73bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 74bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Update the Default Browsers section based on the current state. 75bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen updateOSVersion_: function(versionString) { 76bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen $('osVersion0').textContent = versionString; 77bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen $('osVersion1').textContent = versionString; 78bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen }, 79bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 80ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen updateOSFirmware_: function(firmwareString) { 81ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen $('osFirmware0').textContent = firmwareString; 82ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen $('osFirmware1').textContent = firmwareString; 83ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }, 84ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 85201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch /** 86201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch * Updates the status message like "Checking for update...". 87201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch * @param {string} message The message to be shown. 88201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch * @param {boolean} insertDelay show the message for a while. 89201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch * @private 90201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch */ 91201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch updateStatus_: function(message, insertDelay) { 92201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Add the message to the queue with delay if needed. 93201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // The delay is inserted so users can read the message. 94201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch var delayMs = insertDelay ? MESSAGE_DELAY_MS : 0; 95201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch this.statusMessageQueue_.push([message, delayMs]); 96201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Start the periodic flusher if not started. 97201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch if (this.statusMessageQueueFlushStarted_ == false) { 98201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch this.flushStatusMessageQueuePeriodically_(); 99201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } 100201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch }, 101201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 102201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch /** 103201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch * Flushes the status message queue periodically using a timer. 104201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch * @private 105201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch */ 106201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch flushStatusMessageQueuePeriodically_: function() { 107201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Stop the periodic flusher if the queue becomes empty. 108201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch if (this.statusMessageQueue_.length == 0) { 109201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch this.statusMessageQueueFlushStarted_ = false; 110201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch return; 111201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } 112201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch this.statusMessageQueueFlushStarted_ = true; 113201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 114201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Update the status message. 115201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch var pair = this.statusMessageQueue_.shift(); 116201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch var message = pair[0]; 117201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch var delayMs = pair[1]; 118bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen $('updateStatus').textContent = message; 119201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 120201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Schedule the next flush with delay as needed. 121201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch var self = this; 122201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch window.setTimeout( 123201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch function() { self.flushStatusMessageQueuePeriodically_() }, 124201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch delayMs); 125bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen }, 126bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 127bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen updateEnable_: function(enable) { 128bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen $('checkNow').disabled = !enable; 129bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen }, 130513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 131ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen selectedOptionOnChange_: function(value) { 132ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (value == 'dev-channel') { 133ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Open confirm dialog. 134ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen var self = this; 135ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AlertOverlay.show( 136ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen localStrings.getString('channel_warning_header'), 137ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen localStrings.getString('channel_warning_text'), 138ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen localStrings.getString('ok'), 139ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen localStrings.getString('cancel'), 140ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen function() { 141ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Ok, so set release track and update selected channel. 142ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen $('channelWarningBlock').hidden = false; 143ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen chrome.send('SetReleaseTrack', [value]); 144ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen self.selectedChannel_ = value; }, 145ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen function() { 146ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Cancel, so switch back to previous selected channel. 147ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen self.updateSelectedOption_(self.selectedChannel_); } 148ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ); 149ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } else { 150ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen $('channelWarningBlock').hidden = true; 151ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen chrome.send('SetReleaseTrack', [value]); 152ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.selectedChannel_ = value; 153ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 154ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }, 155ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 156513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Updates the selected option in 'channelSelect' <select> element. 157513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch updateSelectedOption_: function(value) { 158513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch var options = $('channelSelect').querySelectorAll('option'); 159513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch for (var i = 0; i < options.length; i++) { 160513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch var option = options[i]; 161513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch if (option.value == value) { 162513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch option.selected = true; 163ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this.selectedChannel_ = value; 164513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 165513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 166ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (value == 'dev-channel') 167ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen $('channelWarningBlock').hidden = false; 168513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch }, 169513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 170513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Changes the "check now" button to "restart now" button. 171513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch changeToRestartButton_: function() { 172513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch $('checkNow').textContent = localStrings.getString('restart_now'); 173513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch $('checkNow').disabled = false; 174513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch $('checkNow').onclick = function(event) { 175513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch chrome.send('RestartNow'); 176513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch }; 177513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch }, 178bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen }; 179bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 180bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AboutPage.updateOSVersionCallback = function(versionString) { 181bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AboutPage.getInstance().updateOSVersion_(versionString); 182bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen }; 183bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 184ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AboutPage.updateOSFirmwareCallback = function(firmwareString) { 185ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AboutPage.getInstance().updateOSFirmware_(firmwareString); 186ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen }; 187ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 188201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch AboutPage.updateStatusCallback = function(message, insertDelay) { 189201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch AboutPage.getInstance().updateStatus_(message, insertDelay); 190bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen }; 191bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 192bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AboutPage.updateEnableCallback = function(enable) { 193bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AboutPage.getInstance().updateEnable_(enable); 194bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen }; 195bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 196513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch AboutPage.updateSelectedOptionCallback = function(value) { 197513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch AboutPage.getInstance().updateSelectedOption_(value); 198513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch }; 199513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 200bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AboutPage.setUpdateImage = function(state) { 201bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen $('updateIcon').className= 'update-icon ' + state; 202bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen }; 203bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 204513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch AboutPage.changeToRestartButton = function() { 205513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch AboutPage.getInstance().changeToRestartButton_(); 206513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch }; 207513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 208bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Export 209bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen return { 210bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen AboutPage: AboutPage 211bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen }; 212bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 213bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}); 214