OLD | NEW |
(Empty) | |
| 1 // Copyright (c) 2012 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 /** |
| 6 * This view displays information on ChromeOS specific features. |
| 7 */ |
| 8 var CrosView = (function() { |
| 9 'use strict'; |
| 10 |
| 11 var fileContent; |
| 12 var passcode = ''; |
| 13 |
| 14 /** |
| 15 * Clear file input div |
| 16 * |
| 17 * @private |
| 18 */ |
| 19 function clearFileInput_() { |
| 20 $(CrosView.IMPORT_DIV_ID).innerHTML = $(CrosView.IMPORT_DIV_ID).innerHTML; |
| 21 $(CrosView.IMPORT_ONC_ID).addEventListener('change', |
| 22 handleFileChangeEvent_, |
| 23 false); |
| 24 } |
| 25 |
| 26 /** |
| 27 * Send file contents and passcode to C++ cros network library. |
| 28 * |
| 29 * @private |
| 30 */ |
| 31 function importONCFile_() { |
| 32 clearParseStatus_(); |
| 33 if (fileContent) |
| 34 g_browser.importONCFile(fileContent, passcode); |
| 35 else |
| 36 setParseStatus_('ONC file parse failed: cannot read file'); |
| 37 clearFileInput_(); |
| 38 } |
| 39 |
| 40 /** |
| 41 * Set the passcode var, and trigger onc import. |
| 42 * |
| 43 * @param {string} value The passcode value. |
| 44 * @private |
| 45 */ |
| 46 function setPasscode_(value) { |
| 47 passcode = value; |
| 48 if (passcode) |
| 49 importONCFile_(); |
| 50 } |
| 51 |
| 52 /** |
| 53 * Unhide the passcode prompt input field and give it focus. |
| 54 * |
| 55 * @private |
| 56 */ |
| 57 function promptForPasscode_() { |
| 58 $(CrosView.PASSCODE_ID).hidden = false; |
| 59 $(CrosView.PASSCODE_INPUT_ID).focus(); |
| 60 $(CrosView.PASSCODE_INPUT_ID).select(); |
| 61 } |
| 62 |
| 63 /** |
| 64 * Set the fileContent var, and trigger onc import if the file appears to |
| 65 * not be encrypted, or prompt for passcode if the file is encrypted. |
| 66 * |
| 67 * @private |
| 68 * @param {string} text contents of selected file. |
| 69 */ |
| 70 function setFileContent_(result) { |
| 71 fileContent = result; |
| 72 // Parse the JSON to get at the top level "Type" property. |
| 73 var jsonObject; |
| 74 // Ignore any parse errors: they'll get handled in the C++ import code. |
| 75 try { |
| 76 jsonObject = JSON.parse(fileContent); |
| 77 } catch (error) {} |
| 78 // Check if file is encrypted. |
| 79 if (jsonObject && |
| 80 jsonObject.hasOwnProperty('Type') && |
| 81 jsonObject.Type == 'EncryptedConfiguration') { |
| 82 promptForPasscode_(); |
| 83 } else { |
| 84 importONCFile_(); |
| 85 } |
| 86 } |
| 87 |
| 88 /** |
| 89 * Clear ONC file parse status. Clears and hides the parse status div. |
| 90 * |
| 91 * @private |
| 92 */ |
| 93 function clearParseStatus_(error) { |
| 94 var parseStatus = $(CrosView.PARSE_STATUS_ID); |
| 95 parseStatus.hidden = true; |
| 96 parseStatus.textContent = ''; |
| 97 } |
| 98 |
| 99 /** |
| 100 * Set ONC file parse status. |
| 101 * |
| 102 * @private |
| 103 */ |
| 104 function setParseStatus_(error) { |
| 105 var parseStatus = $(CrosView.PARSE_STATUS_ID); |
| 106 parseStatus.hidden = false; |
| 107 parseStatus.textContent = error ? |
| 108 'ONC file parse failed: ' + error : 'ONC file successfully parsed'; |
| 109 reset_(); |
| 110 } |
| 111 |
| 112 /** |
| 113 * Set storing debug logs status. |
| 114 * |
| 115 * @private |
| 116 */ |
| 117 function setStoreDebugLogsStatus_(status) { |
| 118 $(CrosView.STORE_DEBUG_LOGS_STATUS_ID).innerText = status; |
| 119 } |
| 120 |
| 121 /** |
| 122 * Set status for current debug mode. |
| 123 * |
| 124 * @private |
| 125 */ |
| 126 function setNetworkDebugModeStatus_(status) { |
| 127 $(CrosView.DEBUG_STATUS_ID).innerText = status; |
| 128 } |
| 129 |
| 130 /** |
| 131 * An event listener for the file selection field. |
| 132 * |
| 133 * @private |
| 134 */ |
| 135 function handleFileChangeEvent_(event) { |
| 136 clearParseStatus_(); |
| 137 var file = event.target.files[0]; |
| 138 var reader = new FileReader(); |
| 139 reader.onloadend = function(e) { |
| 140 setFileContent_(reader.result); |
| 141 }; |
| 142 reader.readAsText(file); |
| 143 } |
| 144 |
| 145 /** |
| 146 * Add event listeners for the file selection, passcode input |
| 147 * fields, for the button for debug logs storing and for buttons |
| 148 * for debug mode selection. |
| 149 * |
| 150 * @private |
| 151 */ |
| 152 function addEventListeners_() { |
| 153 $(CrosView.IMPORT_ONC_ID).addEventListener('change', |
| 154 handleFileChangeEvent_, |
| 155 false); |
| 156 |
| 157 $(CrosView.PASSCODE_INPUT_ID).addEventListener('change', function(event) { |
| 158 setPasscode_(this.value); |
| 159 }, false); |
| 160 |
| 161 $(CrosView.STORE_DEBUG_LOGS_ID).addEventListener('click', function(event) { |
| 162 $(CrosView.STORE_DEBUG_LOGS_STATUS_ID).innerText = ''; |
| 163 g_browser.storeDebugLogs(); |
| 164 }, false); |
| 165 |
| 166 $(CrosView.DEBUG_WIFI_ID).addEventListener('click', function(event) { |
| 167 setNetworkDebugMode_('wifi'); |
| 168 }, false); |
| 169 $(CrosView.DEBUG_ETHERNET_ID).addEventListener('click', function(event) { |
| 170 setNetworkDebugMode_('ethernet'); |
| 171 }, false); |
| 172 $(CrosView.DEBUG_CELLULAR_ID).addEventListener('click', function(event) { |
| 173 setNetworkDebugMode_('cellular'); |
| 174 }, false); |
| 175 $(CrosView.DEBUG_WIMAX_ID).addEventListener('click', function(event) { |
| 176 setNetworkDebugMode_('wimax'); |
| 177 }, false); |
| 178 $(CrosView.DEBUG_NONE_ID).addEventListener('click', function(event) { |
| 179 setNetworkDebugMode_('none'); |
| 180 }, false); |
| 181 } |
| 182 |
| 183 /** |
| 184 * Reset fileContent and passcode vars. |
| 185 * |
| 186 * @private |
| 187 */ |
| 188 function reset_() { |
| 189 fileContent = undefined; |
| 190 passcode = ''; |
| 191 $(CrosView.PASSCODE_ID).hidden = true; |
| 192 } |
| 193 |
| 194 /** |
| 195 * Enables or disables debug mode for a specified subsystem. |
| 196 * |
| 197 * @private |
| 198 */ |
| 199 function setNetworkDebugMode_(subsystem) { |
| 200 $(CrosView.DEBUG_STATUS_ID).innerText = ''; |
| 201 g_browser.setNetworkDebugMode(subsystem); |
| 202 } |
| 203 |
| 204 /** |
| 205 * @constructor |
| 206 * @extends {DivView} |
| 207 */ |
| 208 function CrosView() { |
| 209 assertFirstConstructorCall(CrosView); |
| 210 |
| 211 // Call superclass's constructor. |
| 212 DivView.call(this, CrosView.MAIN_BOX_ID); |
| 213 |
| 214 g_browser.addCrosONCFileParseObserver(this); |
| 215 g_browser.addStoreDebugLogsObserver(this); |
| 216 g_browser.addSetNetworkDebugModeObserver(this); |
| 217 addEventListeners_(); |
| 218 } |
| 219 |
| 220 CrosView.TAB_ID = 'tab-handle-chromeos'; |
| 221 CrosView.TAB_NAME = 'ChromeOS'; |
| 222 CrosView.TAB_HASH = '#chromeos'; |
| 223 |
| 224 CrosView.MAIN_BOX_ID = 'chromeos-view-tab-content'; |
| 225 CrosView.IMPORT_DIV_ID = 'chromeos-view-import-div'; |
| 226 CrosView.IMPORT_ONC_ID = 'chromeos-view-import-onc'; |
| 227 CrosView.PASSCODE_ID = 'chromeos-view-password-div'; |
| 228 CrosView.PASSCODE_INPUT_ID = 'chromeos-view-onc-password'; |
| 229 CrosView.PARSE_STATUS_ID = 'chromeos-view-parse-status'; |
| 230 CrosView.STORE_DEBUG_LOGS_ID = 'chromeos-view-store-debug-logs'; |
| 231 CrosView.STORE_DEBUG_LOGS_STATUS_ID = 'chromeos-view-store-debug-logs-status'; |
| 232 CrosView.DEBUG_WIFI_ID = 'chromeos-view-network-debugging-wifi'; |
| 233 CrosView.DEBUG_ETHERNET_ID = 'chromeos-view-network-debugging-ethernet'; |
| 234 CrosView.DEBUG_CELLULAR_ID = 'chromeos-view-network-debugging-cellular'; |
| 235 CrosView.DEBUG_WIMAX_ID = 'chromeos-view-network-debugging-wimax'; |
| 236 CrosView.DEBUG_NONE_ID = 'chromeos-view-network-debugging-none'; |
| 237 CrosView.DEBUG_STATUS_ID = 'chromeos-view-network-debugging-status'; |
| 238 |
| 239 cr.addSingletonGetter(CrosView); |
| 240 |
| 241 CrosView.prototype = { |
| 242 // Inherit from DivView. |
| 243 __proto__: DivView.prototype, |
| 244 |
| 245 onONCFileParse: setParseStatus_, |
| 246 onStoreDebugLogs: setStoreDebugLogsStatus_, |
| 247 onSetNetworkDebugMode: setNetworkDebugModeStatus_, |
| 248 }; |
| 249 |
| 250 return CrosView; |
| 251 })(); |
| 252 |
OLD | NEW |