| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 'use strict'; | 5 'use strict'; |
| 6 | 6 |
| 7 /** | 7 /** |
| 8 * @type {string} The host id corresponding to the user's VM. The @pending | 8 * @type {string} The host id corresponding to the user's VM. The @pending |
| 9 * place-holder instructs the Orchestrator to abandon any pending host, | 9 * place-holder instructs the Orchestrator to abandon any pending host, |
| 10 * and is used if no host id is provided by the main window. | 10 * and is used if no host id is provided by the main window. |
| (...skipping 17 matching lines...) Expand all Loading... |
| 28 */ | 28 */ |
| 29 var applicationWindow = null; | 29 var applicationWindow = null; |
| 30 | 30 |
| 31 /** | 31 /** |
| 32 * @type {string} An unique identifier that links the feedback post with the | 32 * @type {string} An unique identifier that links the feedback post with the |
| 33 * logs uploaded by the host. | 33 * logs uploaded by the host. |
| 34 */ | 34 */ |
| 35 var crashServiceReportId = ''; | 35 var crashServiceReportId = ''; |
| 36 | 36 |
| 37 /** | 37 /** |
| 38 * @type {string} The user-selected feedback category, represented by its |
| 39 * l10n tag. |
| 40 */ |
| 41 var selectedCategory = ''; |
| 42 |
| 43 /** |
| 38 * @param {string} email | 44 * @param {string} email |
| 39 * @param {string} realName | 45 * @param {string} realName |
| 40 */ | 46 */ |
| 41 function onUserInfo(email, realName) { | 47 function onUserInfo(email, realName) { |
| 42 /** @type {number} Identifies this product to Google Feedback. **/ | 48 /** @type {number} Identifies this product to Google Feedback. **/ |
| 43 var productId = 93407; | 49 var productId = 93407; |
| 44 | 50 |
| 45 /** @type {string} The base URL for Google Feedback. */ | 51 /** @type {string} The base URL for Google Feedback. */ |
| 46 var url = 'https://www.google.com/tools/feedback/survey/xhtml'; | 52 var url = 'https://www.google.com/tools/feedback/survey/xhtml'; |
| 47 | 53 |
| 48 /** @type {string} The feedback 'bucket', used for clustering. */ | 54 /** @type {string} The feedback 'bucket', used for clustering. */ |
| 49 var bucket = 'feedback'; | 55 var bucket = 'feedback'; |
| 50 | 56 |
| 51 /** @type {string} The user's locale, used to localize the feedback page. */ | 57 /** @type {string} The user's locale, used to localize the feedback page. */ |
| 52 var locale = chrome.i18n.getMessage('@@ui_locale'); | 58 var locale = chrome.i18n.getMessage('@@ui_locale'); |
| 53 | 59 |
| 54 window.open(url + | 60 window.open(url + |
| 55 '?productId=' + productId + | 61 '?productId=' + productId + |
| 56 '&bucket=' + escape(bucket) + | 62 '&bucket=' + escape(bucket) + |
| 57 '&hl=' + escape(locale) + | 63 '&hl=' + escape(locale) + |
| 58 '&psd_email=' + escape(email) + | 64 '&psd_email=' + escape(email) + |
| 59 '&psd_hostId=' + escape(hostId) + | 65 '&psd_hostId=' + escape(hostId) + |
| 60 '&psd_abandonHost=' + escape(abandonHost) + | 66 '&psd_abandonHost=' + escape(abandonHost) + |
| 61 '&psd_crashServiceReportId=' + escape(crashServiceReportId) + | 67 '&psd_crashServiceReportId=' + escape(crashServiceReportId) + |
| 62 '&psd_connectionStats=' + escape(connectionStats)); | 68 '&psd_connectionStats=' + escape(connectionStats) + |
| 69 '&psd_category=' + escape(selectedCategory)); |
| 63 window.close(); | 70 window.close(); |
| 64 | 71 |
| 65 // If the VM was successfully abandoned, close the application. | 72 // If the VM was successfully abandoned, close the application. |
| 66 if (abandonHost == 'yes') { | 73 if (abandonHost == 'yes') { |
| 67 applicationWindow.close(); | 74 applicationWindow.close(); |
| 68 } | 75 } |
| 69 }; | 76 }; |
| 70 | 77 |
| 71 /** | 78 /** |
| 72 * @param {boolean} waiting | 79 * @param {boolean} waiting |
| (...skipping 14 matching lines...) Expand all Loading... |
| 87 var error = document.getElementById('abandon-failed'); | 94 var error = document.getElementById('abandon-failed'); |
| 88 var abandon = document.getElementById('abandon-host'); | 95 var abandon = document.getElementById('abandon-host'); |
| 89 var logs = document.getElementById('include-logs'); | 96 var logs = document.getElementById('include-logs'); |
| 90 var formBody = document.getElementById('form-body'); | 97 var formBody = document.getElementById('form-body'); |
| 91 error.hidden = false; | 98 error.hidden = false; |
| 92 abandon.checked = false; | 99 abandon.checked = false; |
| 93 logs.checked = false; | 100 logs.checked = false; |
| 94 abandonHost = 'failed'; | 101 abandonHost = 'failed'; |
| 95 crashServiceReportId = ''; | 102 crashServiceReportId = ''; |
| 96 formBody.hidden = true; | 103 formBody.hidden = true; |
| 97 resizeWindow(); | 104 base.resizeWindowToContent(true); |
| 98 } | 105 } |
| 99 | 106 |
| 100 /** | 107 /** |
| 101 * @return {string} A random string ID. | 108 * @return {string} A random string ID. |
| 102 */ | 109 */ |
| 103 function generateId() { | 110 function generateId() { |
| 104 var idArray = new Uint8Array(20); | 111 var idArray = new Uint8Array(20); |
| 105 window.crypto.getRandomValues(idArray); | 112 window.crypto.getRandomValues(idArray); |
| 106 return window.btoa(String.fromCharCode.apply(null, idArray)); | 113 return window.btoa(String.fromCharCode.apply(null, idArray)); |
| 107 } | 114 } |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 184 } | 191 } |
| 185 } | 192 } |
| 186 | 193 |
| 187 /** @param {Event} event */ | 194 /** @param {Event} event */ |
| 188 function onLearnMore(event) { | 195 function onLearnMore(event) { |
| 189 event.preventDefault(); // Clicking the link should not tick the checkbox. | 196 event.preventDefault(); // Clicking the link should not tick the checkbox. |
| 190 var learnMoreLink = document.getElementById('learn-more'); | 197 var learnMoreLink = document.getElementById('learn-more'); |
| 191 var learnMoreInfobox = document.getElementById('privacy-info'); | 198 var learnMoreInfobox = document.getElementById('privacy-info'); |
| 192 learnMoreLink.hidden = true; | 199 learnMoreLink.hidden = true; |
| 193 learnMoreInfobox.hidden = false; | 200 learnMoreInfobox.hidden = false; |
| 194 resizeWindow(); | 201 base.resizeWindowToContent(true); |
| 195 } | 202 } |
| 196 | 203 |
| 197 function resizeWindow() { | 204 function onCategorySelect() { |
| 198 var borderY = window.outerHeight - window.innerHeight; | 205 var feedbackCategory = /** @type {HTMLSelectElement} */ |
| 199 window.resizeTo(window.outerWidth, document.body.clientHeight + borderY); | 206 (document.getElementById('feedback-category')); |
| 207 base.debug.assert(feedbackCategory.selectedOptions.length == 1); |
| 208 var selectedOption = /** @type {HTMLElement} */ |
| 209 (feedbackCategory.selectedOptions[0]); |
| 210 selectedCategory = selectedOption.getAttribute('i18n-content'); |
| 211 var selected = selectedCategory != 'FEEDBACK_CATEGORY_SELECT'; |
| 212 document.getElementById('feedback-consent-ok').disabled = !selected; |
| 213 document.getElementById('form-body').hidden = !selected; |
| 214 base.resizeWindowToContent(false); |
| 200 } | 215 } |
| 201 | 216 |
| 202 function onLoad() { | 217 function onLoad() { |
| 203 window.addEventListener('message', onWindowMessage, false); | 218 window.addEventListener('message', onWindowMessage, false); |
| 204 remoting.settings = new remoting.Settings(); | 219 remoting.settings = new remoting.Settings(); |
| 205 l10n.localize(); | 220 l10n.localize(); |
| 206 var ok = document.getElementById('feedback-consent-ok'); | 221 var ok = document.getElementById('feedback-consent-ok'); |
| 207 var cancel = document.getElementById('feedback-consent-cancel'); | 222 var cancel = document.getElementById('feedback-consent-cancel'); |
| 208 var abandon = document.getElementById('abandon-host-label'); | 223 var abandon = document.getElementById('abandon-host-label'); |
| 209 var includeLogs = document.getElementById('include-logs-label'); | 224 var includeLogs = document.getElementById('include-logs-label'); |
| 210 var learnMoreLink = document.getElementById('learn-more'); | 225 var learnMoreLink = document.getElementById('learn-more'); |
| 226 var feedbackCategory = document.getElementById('feedback-category'); |
| 211 ok.addEventListener('click', onOk, false); | 227 ok.addEventListener('click', onOk, false); |
| 212 cancel.addEventListener('click', onCancel, false); | 228 cancel.addEventListener('click', onCancel, false); |
| 213 abandon.addEventListener('click', onToggleAbandon, false); | 229 abandon.addEventListener('click', onToggleAbandon, false); |
| 214 includeLogs.addEventListener('click', onToggleLogs, false); | 230 includeLogs.addEventListener('click', onToggleLogs, false); |
| 215 learnMoreLink.addEventListener('click', onLearnMore, false); | 231 learnMoreLink.addEventListener('click', onLearnMore, false); |
| 216 resizeWindow(); | 232 feedbackCategory.addEventListener('change', onCategorySelect, false); |
| 233 base.resizeWindowToContent(true); |
| 217 } | 234 } |
| 218 | 235 |
| 219 /** @param {Event} event */ | 236 /** @param {Event} event */ |
| 220 function onWindowMessage(event) { | 237 function onWindowMessage(event) { |
| 221 applicationWindow = event.source; | 238 applicationWindow = event.source; |
| 222 var method = /** @type {string} */ (event.data['method']); | 239 var method = /** @type {string} */ (event.data['method']); |
| 223 if (method == 'init') { | 240 if (method == 'init') { |
| 224 if (event.data['hostId']) { | 241 if (event.data['hostId']) { |
| 225 hostId = /** @type {string} */ (event.data['hostId']); | 242 hostId = /** @type {string} */ (event.data['hostId']); |
| 226 } | 243 } |
| 227 connectionStats = /** @type {string} */ (event.data['connectionStats']); | 244 connectionStats = /** @type {string} */ (event.data['connectionStats']); |
| 228 } | 245 } |
| 229 }; | 246 }; |
| 230 | 247 |
| 231 window.addEventListener('load', onLoad, false); | 248 window.addEventListener('load', onLoad, false); |
| OLD | NEW |