blob: 30533e7eff6bfed240e17cd612bb6a2fae5e0d0e [file] [log] [blame]
// 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;
})();