Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(16)

Side by Side Diff: remoting/webapp/app_remoting/js/feedback_consent.js

Issue 1131153003: Add category selector to feedback dialog. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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);
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698