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 |