// 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. /** * This view displays information on ChromeOS specific features. */ var CrosView = (function() { 'use strict'; var fileContent; var passcode = ''; /** * Clear file input div * * @private */ function clearFileInput_() { $(CrosView.IMPORT_DIV_ID).innerHTML = $(CrosView.IMPORT_DIV_ID).innerHTML; $(CrosView.IMPORT_ONC_ID).addEventListener('change', handleFileChangeEvent_, false); } /** * Send file contents and passcode to C++ cros network library. * * @private */ function importONCFile_() { clearParseStatus_(); if (fileContent) g_browser.importONCFile(fileContent, passcode); else setParseStatus_('ONC file parse failed: cannot read file'); clearFileInput_(); } /** * Set the passcode var, and trigger onc import. * * @param {string} value The passcode value. * @private */ function setPasscode_(value) { passcode = value; if (passcode) importONCFile_(); } /** * Unhide the passcode prompt input field and give it focus. * * @private */ function promptForPasscode_() { $(CrosView.PASSCODE_ID).hidden = false; $(CrosView.PASSCODE_INPUT_ID).focus(); $(CrosView.PASSCODE_INPUT_ID).select(); } /** * Set the fileContent var, and trigger onc import if the file appears to * not be encrypted, or prompt for passcode if the file is encrypted. * * @private * @param {string} text contents of selected file. */ function setFileContent_(result) { fileContent = result; // Parse the JSON to get at the top level "Type" property. var jsonObject; // Ignore any parse errors: they'll get handled in the C++ import code. try { jsonObject = JSON.parse(fileContent); } catch (error) {} // Check if file is encrypted. if (jsonObject && jsonObject.hasOwnProperty('Type') && jsonObject.Type == 'EncryptedConfiguration') { promptForPasscode_(); } else { importONCFile_(); } } /** * Clear ONC file parse status. Clears and hides the parse status div. * * @private */ function clearParseStatus_(error) { var parseStatus = $(CrosView.PARSE_STATUS_ID); parseStatus.hidden = true; parseStatus.textContent = ''; } /** * Set ONC file parse status. * * @private */ function setParseStatus_(error) { var parseStatus = $(CrosView.PARSE_STATUS_ID); parseStatus.hidden = false; parseStatus.textContent = error ? 'ONC file parse failed: ' + error : 'ONC file successfully parsed'; reset_(); } /** * Set storing debug logs status. * * @private */ function setStoreDebugLogsStatus_(status) { $(CrosView.STORE_DEBUG_LOGS_STATUS_ID).innerText = status; } /** * Set status for current debug mode. * * @private */ function setNetworkDebugModeStatus_(status) { $(CrosView.DEBUG_STATUS_ID).innerText = status; } /** * An event listener for the file selection field. * * @private */ function handleFileChangeEvent_(event) { clearParseStatus_(); var file = event.target.files[0]; var reader = new FileReader(); reader.onloadend = function(e) { setFileContent_(reader.result); }; reader.readAsText(file); } /** * Add event listeners for the file selection, passcode input * fields, for the button for debug logs storing and for buttons * for debug mode selection. * * @private */ function addEventListeners_() { $(CrosView.IMPORT_ONC_ID).addEventListener('change', handleFileChangeEvent_, false); $(CrosView.PASSCODE_INPUT_ID).addEventListener('change', function(event) { setPasscode_(this.value); }, false); $(CrosView.STORE_DEBUG_LOGS_ID).addEventListener('click', function(event) { $(CrosView.STORE_DEBUG_LOGS_STATUS_ID).innerText = ''; g_browser.storeDebugLogs(); }, false); $(CrosView.DEBUG_WIFI_ID).addEventListener('click', function(event) { setNetworkDebugMode_('wifi'); }, false); $(CrosView.DEBUG_ETHERNET_ID).addEventListener('click', function(event) { setNetworkDebugMode_('ethernet'); }, false); $(CrosView.DEBUG_CELLULAR_ID).addEventListener('click', function(event) { setNetworkDebugMode_('cellular'); }, false); $(CrosView.DEBUG_WIMAX_ID).addEventListener('click', function(event) { setNetworkDebugMode_('wimax'); }, false); $(CrosView.DEBUG_NONE_ID).addEventListener('click', function(event) { setNetworkDebugMode_('none'); }, false); } /** * Reset fileContent and passcode vars. * * @private */ function reset_() { fileContent = undefined; passcode = ''; $(CrosView.PASSCODE_ID).hidden = true; } /** * Enables or disables debug mode for a specified subsystem. * * @private */ function setNetworkDebugMode_(subsystem) { $(CrosView.DEBUG_STATUS_ID).innerText = ''; g_browser.setNetworkDebugMode(subsystem); } /** * @constructor * @extends {DivView} */ function CrosView() { assertFirstConstructorCall(CrosView); // Call superclass's constructor. DivView.call(this, CrosView.MAIN_BOX_ID); g_browser.addCrosONCFileParseObserver(this); g_browser.addStoreDebugLogsObserver(this); g_browser.addSetNetworkDebugModeObserver(this); addEventListeners_(); } CrosView.TAB_ID = 'tab-handle-chromeos'; CrosView.TAB_NAME = 'ChromeOS'; CrosView.TAB_HASH = '#chromeos'; CrosView.MAIN_BOX_ID = 'chromeos-view-tab-content'; CrosView.IMPORT_DIV_ID = 'chromeos-view-import-div'; CrosView.IMPORT_ONC_ID = 'chromeos-view-import-onc'; CrosView.PASSCODE_ID = 'chromeos-view-password-div'; CrosView.PASSCODE_INPUT_ID = 'chromeos-view-onc-password'; CrosView.PARSE_STATUS_ID = 'chromeos-view-parse-status'; CrosView.STORE_DEBUG_LOGS_ID = 'chromeos-view-store-debug-logs'; CrosView.STORE_DEBUG_LOGS_STATUS_ID = 'chromeos-view-store-debug-logs-status'; CrosView.DEBUG_WIFI_ID = 'chromeos-view-network-debugging-wifi'; CrosView.DEBUG_ETHERNET_ID = 'chromeos-view-network-debugging-ethernet'; CrosView.DEBUG_CELLULAR_ID = 'chromeos-view-network-debugging-cellular'; CrosView.DEBUG_WIMAX_ID = 'chromeos-view-network-debugging-wimax'; CrosView.DEBUG_NONE_ID = 'chromeos-view-network-debugging-none'; CrosView.DEBUG_STATUS_ID = 'chromeos-view-network-debugging-status'; cr.addSingletonGetter(CrosView); CrosView.prototype = { // Inherit from DivView. __proto__: DivView.prototype, onONCFileParse: setParseStatus_, onStoreDebugLogs: setStoreDebugLogsStatus_, onSetNetworkDebugMode: setNetworkDebugModeStatus_, }; return CrosView; })();